Repository URL to install this package:
|
Version:
2.1.1 ▾
|
import { fliphash, stringify } from 'chain-able-boost'
import {
IDENTIFIER_REFERENCE_REGISTRY,
IDENTIFIER_STRING_REGISTRY,
} from './IDENTIFIER_REGISTRY'
import { uuid } from './uuid'
// eslint-disable-next-line
function concatIdentifier(obj): string {
let identifier = ''
if (obj.userid) {
identifier += obj.userid
} else if (obj.orderid) {
identifier += obj.orderid
} else if (obj.identifier) {
identifier += obj.identifier
} else if (obj.cardid) {
identifier += obj.cardid
} else if (obj.itemid) {
identifier += obj.itemid
} else if (obj.skuid) {
identifier += obj.skuid
} else if (obj.addressid) {
identifier += obj.addressid
} else if (obj.id) {
identifier += obj.id
}
return identifier
}
// eslint-disable-next-line
function stateTreeIdentifier(obj = {}, old?: Object) {
if (obj.__identifier) {
return obj.__identifier
}
const identifier = concatIdentifier(old || obj)
if (identifier !== '') {
return identifier
}
if (IDENTIFIER_STRING_REGISTRY.has(obj)) {
return IDENTIFIER_STRING_REGISTRY.get(obj)
}
const string = stringify(obj)
if (IDENTIFIER_REFERENCE_REGISTRY.has(string)) {
return IDENTIFIER_REFERENCE_REGISTRY.get(string)
}
const unique = uuid() + string
const hashstring = '__' + fliphash(unique)
IDENTIFIER_REFERENCE_REGISTRY.set(string, hashstring)
IDENTIFIER_STRING_REGISTRY.set(obj, hashstring)
return hashstring
}
export { stateTreeIdentifier }
export default stateTreeIdentifier