-- {-# LANGUAGE ConstraintKinds #-}
-- {-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}

module Glazier.React.ReactId.Internal where

import qualified Data.JSString as J
import qualified GHCJS.Marshal.Pure as J
import qualified GHCJS.Types as J
import qualified JavaScript.Extras as JE

import Data.String

-- type MkId m = MonadState Int m

-- mkId :: MonadState Int m => J.JSString -> m J.JSString
-- mkId n = do
--     i <- get
--     let i' = JE.safeIncrement i
--     put i'
--     pure . J.append n . J.cons ':' . J.pack $ show i'

-- This id can also be used as the react @key@
newtype ReactId = ReactId { unReactId :: J.JSString }
    deriving (Read, Show, Eq, Ord, JE.ToJS, IsString, J.IsJSVal, J.PToJSVal)

-- mkElementalId :: MonadState Int m => J.JSString -> m ElementalId
-- mkElementalId n = ElementalId <$> mkId n