@elqnt/entity 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-K2MPIZE7.js +182 -0
- package/dist/chunk-K2MPIZE7.js.map +1 -0
- package/dist/chunk-QZQSWI3P.mjs +182 -0
- package/dist/chunk-QZQSWI3P.mjs.map +1 -0
- package/dist/index.d.mts +9 -606
- package/dist/index.d.ts +9 -606
- package/dist/index.js +241 -385
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +74 -108
- package/dist/index.mjs.map +1 -1
- package/dist/models/index.d.mts +602 -0
- package/dist/models/index.d.ts +602 -0
- package/dist/models/index.js +147 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/index.mjs +147 -0
- package/dist/models/index.mjs.map +1 -0
- package/package.json +6 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../context/entity-definition-context.tsx","../hooks/use-entity-definition.ts","../models/entity.ts","../store/entity-definition-slice.ts","../hooks/use-entity-definition-details.ts","../hooks/use-entity-record.ts","../store/entity-record-slice.ts","../hooks/use-debounce.ts","../context/entity-record-context.tsx","../consts/colors.ts"],"sourcesContent":["\"use client\";\n\nimport React, { createContext, useContext, useMemo } from \"react\";\nimport {\n useEntityDefinition,\n UseEntityDefinitionType,\n UseEntityDefinitionOptions,\n} from \"../hooks\";\n\nexport const EntityDefinitionContext = createContext<\n UseEntityDefinitionType | undefined\n>(undefined);\n\nexport interface EntityDefinitionProviderProps {\n children: React.ReactNode;\n orgId: string;\n entityName?: string;\n options?: UseEntityDefinitionOptions;\n}\n\nexport function EntityDefinitionProvider({\n children,\n orgId,\n entityName,\n options = {},\n}: EntityDefinitionProviderProps) {\n const hookValue = useEntityDefinition(orgId, entityName, options);\n const value = useMemo(() => hookValue, [hookValue]);\n\n return (\n <EntityDefinitionContext.Provider value={value}>\n {children}\n </EntityDefinitionContext.Provider>\n );\n}\n\nexport function useEntityDefinitionContext() {\n const context = useContext(EntityDefinitionContext);\n\n if (!context) {\n throw new Error(\n \"useEntityDefinitionContext must be used within an EntityDefinitionProvider\"\n );\n }\n\n return context;\n}\n","\"use client\";\n\nimport { useCallback, useEffect } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useNatsContext } from \"@elqnt/nats\";\nimport {\n CreateEntityDefinitionRequest,\n CreateOrgSchemaRequest,\n CreateOrgSchemaResponse,\n CreateViewRequest,\n DropOrgSchemaRequest,\n DropOrgSchemaResponse,\n DeleteEntityDefinitionRequest,\n DeleteViewRequest,\n EntityDefinition,\n EntityDefinitionCreate,\n EntityDefinitionDelete,\n EntityDefinitionGet,\n EntityDefinitionList,\n EntityDefinitionResponse,\n EntityDefinitionUpdate,\n EntityOrgSchemaCreate,\n EntityOrgSchemaDrop,\n EntityView,\n EntityViewCreate,\n EntityViewDelete,\n EntityViewList,\n EntityViewResponse,\n EntityViewUpdate,\n GetEntityDefinitionRequest,\n ListEntityDefinitionsRequest,\n ListEntityDefinitionsResponse,\n ListViewsRequest,\n ListViewsResponse,\n ResponseMetadata,\n UpdateEntityDefinitionRequest,\n UpdateViewRequest,\n} from \"../models\";\nimport {\n addDefinition,\n addView,\n EntityDefinitionSelector,\n removeDefinition,\n removeView,\n setDefinitions,\n setError,\n setLoading,\n setOperationLoading,\n setSelectedDefinition,\n setViews,\n updateDefinition,\n updateView,\n} from \"../store/entity-definition-slice\";\n\nexport type UseEntityDefinitionType = {\n // State\n definitions: Record<string, EntityDefinition>;\n selectedDefinition?: EntityDefinition;\n views: Record<string, EntityView[]>;\n selectedView?: EntityView;\n isLoading: boolean;\n loadingStates: Record<string, boolean>;\n error?: string;\n\n // Organization operations\n createOrgSchema: (orgId: string) => Promise<CreateOrgSchemaResponse>;\n dropOrgSchema: (orgId: string) => Promise<DropOrgSchemaResponse>;\n\n // Definition operations\n loadDefinitions: () => Promise<void>;\n loadDefinition: (name: string) => Promise<void>;\n createDefinition: (\n definition: EntityDefinition\n ) => Promise<EntityDefinitionResponse>;\n updateDefinition: (\n name: string,\n definition: EntityDefinition\n ) => Promise<EntityDefinitionResponse>;\n deleteDefinition: (name: string) => Promise<ResponseMetadata>;\n\n // View operations\n loadViews: (entityName: string) => Promise<void>;\n createView: (entityName: string, view: EntityView) => Promise<EntityView>;\n updateView: (entityName: string, view: EntityView) => Promise<EntityView>;\n deleteView: (\n entityName: string,\n viewId: string\n ) => Promise<{ success: boolean }>;\n\n // Utilities\n refresh: () => void;\n};\n\nexport interface UseEntityDefinitionOptions {\n autoLoad?: boolean;\n module?: string;\n}\n\n// todo: performance improvement: use selectors\n// const selectEntityDefinition = (state: EntityDefinitionSelector) => state.entityDefinition;\n\nexport function useEntityDefinition(\n orgId: string | undefined,\n entityName?: string,\n options: UseEntityDefinitionOptions = {}\n): UseEntityDefinitionType {\n const { autoLoad, module } = options;\n const { natsConnected, request } = useNatsContext();\n const dispatch = useDispatch();\n\n // todo: performance improvement: use selectors\n\n // const selectDefinitions = createSelector(\n // selectEntityDefinition,\n // (state) => state.definitions\n // );\n // const selectSelectedDefinition = createSelector(\n // selectEntityDefinition,\n // (state) => state.selectedDefinition\n // );\n\n // // Similar selectors for views, selectedView, isLoading, loadingStates, error...\n\n // // In the hook\n // const definitions = useSelector(selectDefinitions);\n // const selectedDefinition = useSelector(selectSelectedDefinition);\n // const views = useSelector(selectViews);\n\n const definitions = useSelector(\n (state: EntityDefinitionSelector) => state.entityDefinition.definitions\n );\n const selectedDefinition = useSelector(\n (state: EntityDefinitionSelector) =>\n state.entityDefinition.selectedDefinition\n );\n const views = useSelector(\n (state: EntityDefinitionSelector) => state.entityDefinition.views\n );\n const selectedView = useSelector(\n (state: EntityDefinitionSelector) => state.entityDefinition.selectedView\n );\n const isLoading = useSelector(\n (state: EntityDefinitionSelector) => state.entityDefinition.isLoading\n );\n const loadingStates = useSelector(\n (state: EntityDefinitionSelector) => state.entityDefinition.loadingStates\n );\n const error = useSelector(\n (state: EntityDefinitionSelector) => state.entityDefinition.error\n );\n\n const createOrgSchema = useCallback(\n async (targetOrgId: string): Promise<CreateOrgSchemaResponse> => {\n if (!natsConnected) {\n throw new Error(\"Not connected to NATS\");\n }\n\n dispatch(setOperationLoading({ operation: \"createOrgSchema\", loading: true }));\n\n try {\n const response = await request<\n CreateOrgSchemaRequest,\n CreateOrgSchemaResponse\n >(EntityOrgSchemaCreate, { orgId: targetOrgId });\n\n if (response instanceof Error) {\n throw response;\n }\n\n return response;\n } finally {\n dispatch(setOperationLoading({ operation: \"createOrgSchema\", loading: false }));\n }\n },\n [natsConnected, dispatch, request]\n );\n\n const dropOrgSchema = useCallback(\n async (targetOrgId: string): Promise<DropOrgSchemaResponse> => {\n if (!natsConnected) {\n throw new Error(\"Not connected to NATS\");\n }\n\n dispatch(setOperationLoading({ operation: \"dropOrgSchema\", loading: true }));\n\n try {\n const response = await request<\n DropOrgSchemaRequest,\n DropOrgSchemaResponse\n >(EntityOrgSchemaDrop, { orgId: targetOrgId });\n\n if (response instanceof Error) {\n throw response;\n }\n\n return response;\n } finally {\n dispatch(setOperationLoading({ operation: \"dropOrgSchema\", loading: false }));\n }\n },\n [natsConnected, dispatch, request]\n );\n\n const loadDefinitions = useCallback(async () => {\n if (!natsConnected || !orgId) return;\n\n const loadingKey = \"loadDefinitions\";\n if (loadingStates[loadingKey]) return; // Prevent concurrent loads\n\n dispatch(setOperationLoading({ operation: loadingKey, loading: true }));\n\n try {\n const response = await request<\n ListEntityDefinitionsRequest,\n ListEntityDefinitionsResponse\n >(EntityDefinitionList, { orgId, module });\n\n if (response instanceof Error) {\n dispatch(setError(response.message));\n } else {\n dispatch(setDefinitions(response?.definitions ?? []));\n }\n } catch (err) {\n dispatch(setError(err instanceof Error ? err.message : \"Unknown error\"));\n } finally {\n dispatch(setOperationLoading({ operation: loadingKey, loading: false }));\n }\n }, [natsConnected, orgId, options.module, dispatch, request]);\n\n useEffect(() => {\n let mounted = true;\n\n if (autoLoad && natsConnected && orgId && mounted) {\n loadDefinitions();\n }\n\n return () => {\n mounted = false;\n };\n }, [autoLoad, natsConnected, orgId]);\n\n const loadDefinition = useCallback(\n async (name: string) => {\n if (!natsConnected || !orgId) return;\n\n dispatch(\n setOperationLoading({ operation: `load_${name}`, loading: true })\n );\n try {\n const response = await request<\n GetEntityDefinitionRequest,\n EntityDefinitionResponse\n >(EntityDefinitionGet, { entityName: name, orgId }, {});\n\n if (response instanceof Error) {\n dispatch(setError(response.message));\n return;\n }\n\n dispatch(setSelectedDefinition(response.definition));\n } finally {\n dispatch(\n setOperationLoading({ operation: `load_${name}`, loading: false })\n );\n }\n },\n [natsConnected, orgId, dispatch, request]\n );\n\n useEffect(() => {\n if (natsConnected && orgId && entityName) {\n loadDefinition(entityName);\n }\n }, [natsConnected, orgId, entityName, loadDefinition]);\n\n const createDefinition = async (definition: EntityDefinition) => {\n if (!natsConnected || !orgId) {\n throw new Error(\"Not connected or missing orgId\");\n }\n\n dispatch(setOperationLoading({ operation: \"create\", loading: true }));\n\n try {\n const response = await request<\n CreateEntityDefinitionRequest,\n EntityDefinitionResponse\n >(EntityDefinitionCreate, { definition, orgId }, {});\n\n // console.log(\"createDefinition response\", response);\n\n if (response instanceof Error) {\n console.error(\"createDefinition error\", response);\n throw response;\n }\n\n if (response.metadata.success) {\n dispatch(addDefinition(response.definition));\n }\n return response;\n } finally {\n dispatch(setOperationLoading({ operation: \"create\", loading: false }));\n }\n };\n\n const updateDefinitionById = async (\n name: string,\n definition: EntityDefinition\n ) => {\n if (!natsConnected || !orgId) {\n throw new Error(\"Not connected or missing orgId\");\n }\n\n dispatch(\n setOperationLoading({ operation: `update_${name}`, loading: true })\n );\n try {\n const response = await request<\n UpdateEntityDefinitionRequest,\n EntityDefinitionResponse\n >(\n EntityDefinitionUpdate,\n {\n entityName: name,\n definition,\n orgId,\n },\n {}\n );\n\n if (response instanceof Error) {\n throw response;\n }\n\n if (response.metadata.success) {\n dispatch(updateDefinition(response.definition));\n }\n\n return response;\n } finally {\n dispatch(\n setOperationLoading({ operation: `update_${name}`, loading: false })\n );\n }\n };\n\n const deleteDefinition = async (name: string) => {\n if (!natsConnected || !orgId) {\n throw new Error(\"Not connected or missing orgId\");\n }\n\n dispatch(\n setOperationLoading({ operation: `delete_${name}`, loading: true })\n );\n try {\n const response = await request<\n DeleteEntityDefinitionRequest,\n ResponseMetadata\n >(EntityDefinitionDelete, { entityName: name, orgId }, {});\n\n if (response instanceof Error) {\n throw response;\n }\n\n dispatch(removeDefinition(name));\n return response;\n } finally {\n dispatch(\n setOperationLoading({ operation: `delete_${name}`, loading: false })\n );\n }\n };\n\n const loadViews = useCallback(\n async (entityName: string): Promise<void> => {\n if (!natsConnected || !orgId) return;\n\n const loadingKey = `loadViews_${entityName}`;\n if (loadingStates[loadingKey]) return; // Prevent concurrent loads\n\n dispatch(setOperationLoading({ operation: loadingKey, loading: true }));\n\n try {\n const response = await request<ListViewsRequest, ListViewsResponse>(\n EntityViewList,\n { entityName, orgId },\n {}\n );\n\n console.log(\"loadViews response\", response);\n\n if (response instanceof Error) {\n dispatch(setError(response.message));\n return;\n }\n\n dispatch(setViews({ entityName, views: response.views }));\n } catch (err) {\n dispatch(\n setError(err instanceof Error ? err.message : \"Unknown error\")\n );\n } finally {\n dispatch(\n setOperationLoading({ operation: loadingKey, loading: false })\n );\n }\n },\n [natsConnected, orgId, loadingStates, dispatch, request]\n );\n\n const createView = async (entityName: string, view: EntityView) => {\n if (!natsConnected || !orgId) {\n throw new Error(\"Not connected or missing orgId\");\n }\n\n dispatch(setOperationLoading({ operation: \"create_view\", loading: true }));\n try {\n const response = await request<CreateViewRequest, EntityViewResponse>(\n EntityViewCreate,\n { entityName, view, orgId },\n {}\n );\n\n if (response instanceof Error) {\n throw response;\n }\n\n dispatch(addView({ entityName, view: response.view }));\n return response.view;\n } finally {\n dispatch(\n setOperationLoading({ operation: \"create_view\", loading: false })\n );\n }\n };\n\n const updateViewById = async (entityName: string, view: EntityView) => {\n if (!natsConnected || !orgId || !view.id) {\n throw new Error(\"Not connected, missing orgId, or invalid view\");\n }\n\n dispatch(\n setOperationLoading({\n operation: `update_view_${view.id}`,\n loading: true,\n })\n );\n try {\n const response = await request<UpdateViewRequest, EntityViewResponse>(\n EntityViewUpdate,\n { view, orgId },\n {}\n );\n\n if (response instanceof Error) {\n throw response;\n }\n\n // console.log(\"updateViewById response\", response);\n\n dispatch(updateView({ entityName, view: response.view }));\n return response.view;\n } finally {\n dispatch(\n setOperationLoading({\n operation: `update_view_${view.id}`,\n loading: false,\n })\n );\n }\n };\n\n const deleteView = async (entityName: string, viewId: string) => {\n if (!natsConnected || !orgId) {\n throw new Error(\"Not connected or missing orgId\");\n }\n\n dispatch(\n setOperationLoading({ operation: `delete_view_${viewId}`, loading: true })\n );\n try {\n const response = await request<DeleteViewRequest, ResponseMetadata>(\n EntityViewDelete,\n { viewId, orgId },\n {}\n );\n\n if (response instanceof Error) {\n throw response;\n }\n\n dispatch(removeView({ entityName, viewId }));\n return response;\n } finally {\n dispatch(\n setOperationLoading({\n operation: `delete_view_${viewId}`,\n loading: false,\n })\n );\n }\n };\n\n const refresh = useCallback(() => {\n if (!natsConnected || !orgId) return;\n\n if (entityName) {\n loadDefinition(entityName);\n } else {\n dispatch(setLoading(true));\n loadDefinitions().finally(() => dispatch(setLoading(false)));\n }\n }, [natsConnected, orgId, entityName, loadDefinition, dispatch]);\n\n return {\n // State\n definitions,\n selectedDefinition,\n views,\n selectedView,\n isLoading,\n loadingStates,\n error,\n\n // Organization operations\n createOrgSchema,\n dropOrgSchema,\n\n // Definition operations\n loadDefinitions,\n loadDefinition,\n createDefinition,\n updateDefinition: updateDefinitionById,\n deleteDefinition,\n\n // View operations\n loadViews,\n createView,\n updateView: updateViewById,\n deleteView,\n\n // Utilities\n refresh,\n };\n}\n","// Code generated by tygo. DO NOT EDIT.\nimport { JSONSchema } from \"@elqnt/types\";\n\n//////////\n// source: constants.go\n\nexport type EntityFilterOperator = string;\n/**\n * todo: move to types package\n */\nexport const OperatorEq: EntityFilterOperator = \"eq\";\n/**\n * todo: move to types package\n */\nexport const OperatorNe: EntityFilterOperator = \"ne\";\n/**\n * todo: move to types package\n */\nexport const OperatorGt: EntityFilterOperator = \"gt\";\n/**\n * todo: move to types package\n */\nexport const OperatorGte: EntityFilterOperator = \"gte\";\n/**\n * todo: move to types package\n */\nexport const OperatorLt: EntityFilterOperator = \"lt\";\n/**\n * todo: move to types package\n */\nexport const OperatorLte: EntityFilterOperator = \"lte\";\n/**\n * todo: move to types package\n */\nexport const OperatorIn: EntityFilterOperator = \"in\";\n/**\n * todo: move to types package\n */\nexport const OperatorNin: EntityFilterOperator = \"nin\";\n/**\n * todo: move to types package\n */\nexport const OperatorContains: EntityFilterOperator = \"contains\";\n/**\n * todo: move to types package\n */\nexport const OperatorStartsWith: EntityFilterOperator = \"startsWith\";\n/**\n * todo: move to types package\n */\nexport const OperatorEndsWith: EntityFilterOperator = \"endsWith\";\n/**\n * todo: move to types package\n */\nexport const OperatorExists: EntityFilterOperator = \"exists\";\n/**\n * todo: move to types package\n */\nexport const OperatorEmpty: EntityFilterOperator = \"empty\";\n/**\n * todo: move to types package\n */\nexport const OperatorBetween: EntityFilterOperator = \"between\";\n\nexport const EntityFilterOperators = {\n eq: { value: 'eq', label: 'Equal to' },\n ne: { value: 'ne', label: 'Not equal to' },\n gt: { value: 'gt', label: 'Greater than' },\n gte: { value: 'gte', label: 'Greater than or equal to' },\n lt: { value: 'lt', label: 'Less than' },\n lte: { value: 'lte', label: 'Less than or equal to' },\n in: { value: 'in', label: 'In' },\n nin: { value: 'nin', label: 'Not in' },\n contains: { value: 'contains', label: 'Contains' },\n startsWith: { value: 'startsWith', label: 'Starts with' },\n endsWith: { value: 'endsWith', label: 'Ends with' },\n exists: { value: 'exists', label: 'Exists' },\n empty: { value: 'empty', label: 'Empty' },\n between: { value: 'between', label: 'Between' }\n} as const;\n\nexport type EntityFilterOperatorTS = keyof typeof EntityFilterOperators;\nexport type EntityFilterOperatorOptionTS = typeof EntityFilterOperators[EntityFilterOperatorTS];\n\nexport type EntityFieldType = string;\nexport const EntityFieldTypeString: EntityFieldType = \"string\";\nexport const EntityFieldTypeStringMultiline: EntityFieldType = \"stringMultiline\";\nexport const EntityFieldTypeText: EntityFieldType = \"text\";\nexport const EntityFieldTypeInt: EntityFieldType = \"int\";\nexport const EntityFieldTypeFloat: EntityFieldType = \"float\";\nexport const EntityFieldTypeBool: EntityFieldType = \"bool\";\nexport const EntityFieldTypeDate: EntityFieldType = \"date\";\nexport const EntityFieldTypeDateTime: EntityFieldType = \"datetime\";\nexport const EntityFieldTypeEmail: EntityFieldType = \"email\";\nexport const EntityFieldTypePhone: EntityFieldType = \"phone\";\nexport const EntityFieldTypeURL: EntityFieldType = \"url\";\nexport const EntityFieldTypeDropdown: EntityFieldType = \"dropdown\";\nexport const EntityFieldTypeMultiSelect: EntityFieldType = \"multiselect\";\nexport const EntityFieldTypeLookup: EntityFieldType = \"lookup\";\nexport const EntityFieldTypeMultiLookup: EntityFieldType = \"multilookup\";\nexport const EntityFieldTypeCurrency: EntityFieldType = \"currency\";\nexport const EntityFieldTypeFile: EntityFieldType = \"file\";\nexport const EntityFieldTypeImage: EntityFieldType = \"image\";\nexport const EntityFieldTypeJSON: EntityFieldType = \"json\";\n\nexport const EntityFieldTypes = {\n string: { value: 'string', label: 'Short Text' },\n stringMultiline: { value: 'stringMultiline', label: 'Long Text' },\n text: { value: 'text', label: 'Rich Text Editor' },\n int: { value: 'int', label: 'Integer' },\n float: { value: 'float', label: 'Decimal' },\n bool: { value: 'bool', label: 'Boolean' },\n date: { value: 'date', label: 'Date' },\n datetime: { value: 'datetime', label: 'Date & Time' },\n email: { value: 'email', label: 'Email' },\n phone: { value: 'phone', label: 'Phone' },\n url: { value: 'url', label: 'URL' },\n dropdown: { value: 'dropdown', label: 'Dropdown' },\n multiselect: { value: 'multiselect', label: 'Multi Select' },\n lookup: { value: 'lookup', label: 'Lookup' },\n multilookup: { value: 'multilookup', label: 'Multi Lookup' },\n currency: { value: 'currency', label: 'Currency' },\n file: { value: 'file', label: 'File' },\n image: { value: 'image', label: 'Image' },\n json: { value: 'json', label: 'JSON' }\n} as const;\n\nexport type EntityFieldTypeTS = keyof typeof EntityFieldTypes;\nexport type EntityFieldTypeOptionTS = typeof EntityFieldTypes[EntityFieldTypeTS];\n\n\n//////////\n// source: entities-models.go\n\nexport interface EntityDefinition {\n id: string /* uuid */;\n name: string;\n displayName: string;\n module: string;\n description: string;\n schema: JSONSchema;\n defaultViewId: string /* uuid */;\n metadata?: { [key: string]: any};\n createdAt: string /* RFC3339 */;\n updatedAt: string /* RFC3339 */;\n isActive: boolean;\n version: number /* int */;\n}\nexport interface EntityRecord {\n id: string /* uuid */;\n entityId: string /* uuid */;\n name: string;\n fields: { [key: string]: any}; // ** must match the entity definition schema\n tags?: string[];\n metadata?: { [key: string]: any};\n createdAt: string /* RFC3339 */;\n updatedAt: string /* RFC3339 */;\n isActive: boolean;\n version: number /* int */;\n}\n/**\n * View defines how to display entity records in a list\n */\nexport interface View {\n id: string /* uuid */;\n entityId: string /* uuid */;\n name: string;\n displayName: string;\n description?: string;\n isDefault: boolean;\n columns: ViewColumn[];\n filters: Filter[];\n sort: Sort[];\n}\nexport interface Filter {\n field: string;\n operator: EntityFilterOperator;\n value: any;\n}\nexport interface Sort {\n field: string;\n direction: number /* int */; // 1 for asc, -1 for desc\n}\nexport interface FieldValidation {\n required: boolean;\n min?: number /* float64 */;\n max?: number /* float64 */;\n minLength?: number /* int */;\n maxLength?: number /* int */;\n pattern?: string;\n customRules?: ValidationRule[];\n}\nexport interface ValidationRule {\n name: string;\n conditions: ValidationRuleCondition[];\n}\nexport interface ValidationRuleCondition {\n field: string;\n operator: string;\n value: any;\n}\nexport interface RecordReference {\n entityName: string;\n recordId: string /* uuid */;\n fieldName: string;\n referencedAt: string /* RFC3339 */;\n}\nexport interface InsertOneResult {\n insertedId: string;\n success: boolean;\n error: string;\n}\n/**\n * Query related models\n */\nexport interface EntityQuery {\n filters: { [key: string]: any};\n page: number /* int64 */;\n pageSize: number /* int64 */;\n sortBy: string;\n sortOrder: number /* int */;\n includeLookups?: LookupInclude[];\n include?: string[]; // Fields to include\n exclude?: string[]; // Fields to exclude\n}\nexport interface LookupInclude {\n entityName: string;\n fieldName: string;\n fields?: string[];\n}\nexport interface QueryRequest {\n orgId: string;\n entityName: string;\n viewId?: string /* uuid */;\n query: EntityQuery;\n}\n/**\n * Request/Response models\n */\nexport interface CreateEntityDefinitionRequest {\n orgId: string;\n definition: EntityDefinition;\n}\nexport interface CreateOrgSchemaRequest {\n orgId: string /* uuid */;\n}\nexport interface CreateOrgSchemaResponse {\n metadata: ResponseMetadata;\n}\nexport interface DropOrgSchemaRequest {\n orgId: string /* uuid */;\n}\nexport interface DropOrgSchemaResponse {\n metadata: ResponseMetadata;\n}\nexport interface CreateRecordRequest {\n orgId: string;\n entityName: string;\n record: EntityRecord;\n}\nexport interface UpdateRecordRequest {\n orgId: string;\n entityName: string;\n recordId: string /* uuid */;\n record: EntityRecord;\n}\nexport interface DeleteRecordRequest {\n orgId: string;\n entityName: string;\n recordId: string;\n}\n/**\n * View models\n */\nexport interface EntityView {\n id: string /* uuid */;\n name: string;\n displayName: string;\n entityName: string;\n columns: ViewColumn[];\n filters: ViewFilter[];\n lookups: LookupInclude[];\n sortBy?: string;\n sortOrder?: number /* int */;\n isDefault: boolean;\n createdAt: string /* RFC3339 */;\n updatedAt: string /* RFC3339 */;\n isActive: boolean;\n version: number /* int */;\n}\nexport interface ViewColumn {\n fieldName: string;\n displayName: string;\n width: number /* int */;\n sortable: boolean;\n visible: boolean;\n order: number /* int */;\n}\nexport interface ViewFilter {\n fieldName: string;\n operator: string;\n value: any;\n}\n/**\n * Bulk operation models\n */\nexport interface BulkCreateRequest {\n orgId: string;\n entityName: string;\n records: EntityRecord[];\n}\nexport interface BulkUpdateRequest {\n orgId: string;\n entityName: string;\n records: EntityRecord[];\n}\nexport interface BulkDeleteRequest {\n orgId: string;\n entityName: string;\n recordIds: string /* uuid */[];\n}\nexport interface UpdateEntityDefinitionRequest {\n orgId: string;\n entityName: string; // Identify which entity to update\n definition: EntityDefinition;\n}\nexport interface GetEntityDefinitionRequest {\n orgId: string;\n entityName: string;\n}\nexport interface DeleteEntityDefinitionRequest {\n orgId: string;\n entityName: string;\n deleteRecords?: boolean; // If true, delete all entity records before deleting definition\n hardDelete?: boolean; // If true, permanently delete from database instead of soft delete\n}\nexport interface ListEntityDefinitionsRequest {\n orgId: string;\n module?: string; // Optional: filter by module (sales, marketing, etc)\n status?: string; // Optional: active, inactive, etc\n}\n/**\n * View related requests\n */\nexport interface CreateViewRequest {\n orgId: string;\n entityName: string;\n view: EntityView;\n}\nexport interface UpdateViewRequest {\n orgId: string;\n view: EntityView;\n}\nexport interface DeleteViewRequest {\n orgId: string;\n viewId: string /* uuid */;\n}\nexport interface GetViewRequest {\n orgId: string;\n viewId: string /* uuid */;\n}\nexport interface ListViewsRequest {\n orgId: string;\n entityName: string;\n}\n/**\n * Response models\n */\nexport interface EntityDefinitionResponse {\n definition: EntityDefinition;\n metadata: ResponseMetadata;\n}\nexport interface ListEntityDefinitionsResponse {\n definitions: EntityDefinition[];\n metadata: ResponseMetadata;\n}\nexport interface EntityViewResponse {\n view: EntityView;\n metadata: ResponseMetadata;\n}\nexport interface ListViewsResponse {\n views: EntityView[];\n metadata: ResponseMetadata;\n}\nexport interface EntityRecordResponse {\n record: EntityRecord;\n metadata: ResponseMetadata;\n}\nexport interface ListEntityRecordsResponse {\n records?: ListResult<EntityRecord>;\n metadata: ResponseMetadata;\n}\n/**\n * Common response metadata\n */\nexport interface ResponseMetadata {\n success: boolean;\n timestamp: string /* RFC3339 */;\n message?: string;\n error?: string;\n}\nexport interface ListOptions {\n Page: number /* int64 */;\n PageSize: number /* int64 */;\n SortBy: string;\n SortOrder: number /* int */;\n Filters: { [key: string]: any};\n Include: string[];\n Exclude: string[];\n}\nexport interface ListResult<T extends any> {\n items: T[];\n totalCount: number /* int64 */;\n currentPage: number /* int64 */;\n pageSize: number /* int64 */;\n totalPages: number /* int64 */;\n}\nexport interface GetEntityRecordRequest {\n orgId: string;\n entityName: string;\n recordId: string;\n}\nexport interface GetEntityRecordResponse {\n record?: EntityRecord;\n metadata: ResponseMetadata;\n}\nexport interface CountEntityRecordsRequest {\n orgId: string;\n entityName: string;\n filters?: { [key: string]: any};\n}\nexport interface CountEntityRecordsResponse {\n count: number /* int64 */;\n metadata: ResponseMetadata;\n}\n\n//////////\n// source: events.go\n\nexport interface EntityRecordChangeEvent {\n orgId: string;\n entityName: string;\n recordId: string;\n record?: EntityRecord;\n changes?: RecordChange;\n action: RecordChangeAction; // created, updated, deleted\n timestamp: string /* RFC3339 */;\n}\nexport interface RecordChange {\n /**\n * OldValues map[string]TypedValue `json:\"oldValues,omitempty\"`\n * NewValues map[string]TypedValue `json:\"newValues,omitempty\"`\n */\n changedAt: string /* RFC3339 */;\n changedBy: string /* ObjectID */;\n fields: string[]; // List of changed field names for quick reference\n}\nexport interface EntityDefinitionChangeEvent {\n orgId: string;\n definition?: EntityDefinition;\n action: string; // created, updated, deleted\n timestamp: string /* RFC3339 */;\n}\nexport interface EntityViewChangeEvent {\n orgId: string;\n entityName: string;\n view?: EntityView;\n action: string; // created, updated, deleted\n timestamp: string /* RFC3339 */;\n}\nexport type RecordChangeAction = string;\nexport const RecordChangeActionCreated: RecordChangeAction = \"created\";\nexport const RecordChangeActionUpdated: RecordChangeAction = \"updated\";\nexport const RecordChangeActionDeleted: RecordChangeAction = \"deleted\";\n\n//////////\n// source: subjects.go\n\nexport const EntityOrgSchemaCreate = \"entity.org.schema.create\";\nexport const EntityOrgSchemaDrop = \"entity.org.schema.drop\";\nexport const EntityDefinitionCreate = \"entity.definition.create\";\nexport const EntityDefinitionCreated = \"entity.definition.created\";\nexport const EntityDefinitionUpdate = \"entity.definition.update\";\nexport const EntityDefinitionGet = \"entity.definition.get\";\nexport const EntityDefinitionGetServer = \"entity.definition.get.server\";\nexport const EntityDefinitionList = \"entity.definition.list\";\nexport const EntityDefinitionUpdated = \"entity.definition.updated\";\nexport const EntityDefinitionDelete = \"entity.definition.delete\";\nexport const EntityDefinitionDeleted = \"entity.definition.deleted\";\nexport const EntityRecordCreate = \"entity.record.create\";\nexport const EntityRecordCreated = \"entity.record.created\";\nexport const EntityRecordGet = \"entity.record.get\";\nexport const EntityRecordQuery = \"entity.record.query\";\nexport const EntityRecordCount = \"entity.record.count\";\nexport const EntityRecordUpdate = \"entity.record.update\";\nexport const EntityRecordUpdated = \"entity.record.updated\";\nexport const EntityRecordDelete = \"entity.record.delete\";\nexport const EntityRecordDeleted = \"entity.record.deleted\";\nexport const EntityRecordsBulkCreate = \"entity.records.bulk.create\";\nexport const EntityRecordsBulkCreated = \"entity.records.bulk.created\";\nexport const EntityRecordsBulkUpdate = \"entity.records.bulk.update\";\nexport const EntityRecordsBulkUpdated = \"entity.records.bulk.updated\";\nexport const EntityRecordsBulkDelete = \"entity.records.bulk.delete\";\nexport const EntityRecordsBulkDeleted = \"entity.records.bulk.deleted\";\nexport const EntityViewCreate = \"entity.view.create\";\nexport const EntityViewCreated = \"entity.view.created\";\nexport const EntityViewUpdate = \"entity.view.update\";\nexport const EntityViewUpdated = \"entity.view.updated\";\nexport const EntityViewDelete = \"entity.view.delete\";\nexport const EntityViewDeleted = \"entity.view.deleted\";\nexport const EntityViewList = \"entity.view.list\";\n","// store/entityDefinitionSlice.ts\nimport { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { EntityDefinition, EntityView } from \"../models\";\nexport interface EntityDefinitionState {\n definitions: Record<string, EntityDefinition>;\n selectedDefinition?: EntityDefinition;\n views: Record<string, EntityView[]>;\n selectedView?: EntityView;\n isLoading: boolean;\n error?: string;\n loadingStates: Record<string, boolean>;\n}\n\nexport interface EntityDefinitionSelector {\n entityDefinition: EntityDefinitionState;\n}\n\nconst initialState: EntityDefinitionState = {\n definitions: {},\n views: {},\n isLoading: false,\n loadingStates: {},\n};\n\nconst entityDefinitionSlice = createSlice({\n name: \"entityDefinition\",\n initialState,\n reducers: {\n setLoading: (state, action: PayloadAction<boolean>) => {\n state.isLoading = action.payload;\n },\n setOperationLoading: (\n state,\n action: PayloadAction<{ operation: string; loading: boolean }>\n ) => {\n state.loadingStates[action.payload.operation] = action.payload.loading;\n },\n setError: (state, action: PayloadAction<string | undefined>) => {\n state.error = action.payload;\n },\n setDefinitions: (state, action: PayloadAction<EntityDefinition[]>) => {\n state.definitions = action.payload.reduce(\n (acc, def) => {\n acc[def.name] = def;\n return acc;\n },\n {} as Record<string, EntityDefinition>\n );\n },\n addDefinition: (state, action: PayloadAction<EntityDefinition>) => {\n const definition = action.payload;\n state.definitions[definition.name] = definition;\n },\n updateDefinition: (state, action: PayloadAction<EntityDefinition>) => {\n const definition = action.payload;\n state.definitions[definition.name] = definition;\n if (state.selectedDefinition?.name === definition.name) {\n state.selectedDefinition = definition;\n }\n },\n removeDefinition: (state, action: PayloadAction<string>) => {\n delete state.definitions[action.payload];\n if (state.selectedDefinition?.name === action.payload) {\n state.selectedDefinition = undefined;\n }\n },\n setSelectedDefinition: (\n state,\n action: PayloadAction<EntityDefinition | undefined>\n ) => {\n state.selectedDefinition = action.payload;\n },\n setViews: (\n state,\n action: PayloadAction<{ entityName: string; views: EntityView[] }>\n ) => {\n const { entityName, views } = action.payload;\n state.views[entityName] = views;\n },\n addView: (\n state,\n action: PayloadAction<{ entityName: string; view: EntityView }>\n ) => {\n const { entityName, view } = action.payload;\n if (!state.views[entityName]) {\n state.views[entityName] = [];\n }\n state.views[entityName].push(view);\n },\n updateView: (\n state,\n action: PayloadAction<{ entityName: string; view: EntityView }>\n ) => {\n const { entityName, view } = action.payload;\n const views = state.views[entityName];\n if (views) {\n const index = views.findIndex((v) => v.id === view.id);\n if (index !== -1) {\n views[index] = view;\n if (state.selectedView?.id === view.id) {\n state.selectedView = view;\n }\n }\n }\n },\n removeView: (\n state,\n action: PayloadAction<{ entityName: string; viewId: string }>\n ) => {\n const { entityName, viewId } = action.payload;\n const views = state.views[entityName];\n if (views) {\n state.views[entityName] = views.filter((v) => v.id !== viewId);\n if (state.selectedView?.id === viewId) {\n state.selectedView = undefined;\n }\n }\n },\n setSelectedView: (state, action: PayloadAction<EntityView | undefined>) => {\n state.selectedView = action.payload;\n },\n },\n});\n\nexport const {\n setLoading,\n setOperationLoading,\n setError,\n setDefinitions,\n addDefinition,\n updateDefinition,\n removeDefinition,\n setSelectedDefinition,\n setViews,\n addView,\n updateView,\n removeView,\n setSelectedView,\n} = entityDefinitionSlice.actions;\n\nexport const entityDefinitionReducer = entityDefinitionSlice.reducer;\n","\"use client\";\n\nimport { useCallback, useEffect } from \"react\";\nimport { useEntityDefinitionContext } from \"../context/entity-definition-context\";\nimport { EntityDefinition } from \"../models\";\n\nexport function useEntityDefinitionDetails(entityName: string) {\n const context = useEntityDefinitionContext();\n const definition = context.definitions[entityName];\n\n const loadDefinitionDetails = useCallback(async () => {\n return context.loadDefinition(entityName);\n }, [context, entityName]);\n\n useEffect(() => {\n if (entityName && !definition) {\n loadDefinitionDetails();\n }\n }, [definition, entityName, loadDefinitionDetails]);\n\n return {\n definition,\n isLoading: context.loadingStates[`load_${entityName}`],\n error: context.error,\n updateDefinition: (updatedDef: EntityDefinition) =>\n context.updateDefinition(entityName, updatedDef),\n deleteDefinition: () => context.deleteDefinition(entityName),\n refresh: loadDefinitionDetails,\n };\n}\n","\"use client\";\n\nimport { useCallback, useEffect } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useNatsContext } from \"@elqnt/nats\";\nimport {\n CreateRecordRequest,\n DeleteRecordRequest,\n EntityQuery,\n EntityRecord,\n EntityRecordCreate,\n EntityRecordDelete,\n EntityRecordGet,\n EntityRecordQuery,\n EntityRecordCount,\n EntityRecordResponse,\n EntityRecordUpdate,\n GetEntityRecordRequest,\n ListEntityRecordsResponse,\n QueryRequest,\n ResponseMetadata,\n UpdateRecordRequest,\n CountEntityRecordsRequest,\n CountEntityRecordsResponse,\n} from \"../models\";\nimport {\n addRecord,\n EntityRecordSelector,\n removeRecord,\n setError,\n setOperationLoading,\n setRecords,\n setSelected,\n setSelectedRecord,\n updateQueryParams,\n updateRecord,\n} from \"../store/entity-record-slice\";\n\nexport type UseEntityRecordType = {\n // State\n records: Record<string, EntityRecord>;\n selectedRecord?: EntityRecord;\n params: EntityQuery;\n selected: string[];\n isLoading: boolean;\n loadingStates: Record<string, boolean>;\n error?: string;\n\n // Operations\n loadRecords: (params?: Partial<EntityQuery>) => Promise<void>;\n createRecord: (record: EntityRecord) => Promise<EntityRecordResponse>;\n updateRecord: (record: EntityRecord) => Promise<EntityRecordResponse>;\n deleteRecord: (recordId: string) => Promise<ResponseMetadata>;\n loadRecord: (recordId: string) => Promise<void>;\n countRecords: (filters?: Record<string, any>) => Promise<number>;\n getEntityRecordById: (recordId: string) => Promise<EntityRecord | null>;\n\n\n // Selection\n selectRecords: (ids: string[]) => void;\n clearSelection: () => void;\n\n // Query\n updateParams: (params: Partial<EntityQuery>) => void;\n refresh: () => void;\n};\n\nconst defaultQuery: EntityQuery = {\n filters: {},\n page: 1,\n pageSize: 25,\n sortBy: \"metadata.createdAt\",\n sortOrder: -1,\n};\n\nexport function useEntityRecord(\n orgId: string | undefined,\n entityName: string,\n options: { autoLoad?: boolean } = {}\n): UseEntityRecordType {\n const { autoLoad = true } = options;\n const { natsConnected, request } = useNatsContext();\n const dispatch = useDispatch();\n\n const recordState = useSelector(\n (state: EntityRecordSelector) =>\n state.entityRecord.records[entityName] || {\n items: {},\n params: defaultQuery,\n meta: {\n items: [],\n totalCount: 0,\n currentPage: 1,\n pageSize: 25,\n totalPages: 0,\n },\n selected: [],\n }\n );\n\n const selectedRecord = useSelector(\n (state: EntityRecordSelector) => state.entityRecord.selectedRecord\n );\n\n const isLoading = useSelector(\n (state: EntityRecordSelector) => state.entityRecord.isLoading\n );\n const loadingStates = useSelector(\n (state: EntityRecordSelector) => state.entityRecord.loadingStates\n );\n const error = useSelector(\n (state: EntityRecordSelector) => state.entityRecord.error\n );\n\n const loadRecords = useCallback(\n async (params?: Partial<EntityQuery>) => {\n if (!natsConnected || !orgId) return;\n\n const loadingKey = `load_${entityName}`;\n if (loadingStates[loadingKey]) return;\n\n dispatch(setOperationLoading({ operation: loadingKey, loading: true }));\n\n try {\n const queryParams = { ...recordState.params, ...params };\n // console.log(\"will loadRecords\", queryParams);\n\n const response = await request<QueryRequest, ListEntityRecordsResponse>(\n EntityRecordQuery,\n {\n orgId,\n entityName,\n query: queryParams,\n }\n );\n\n if (response instanceof Error) {\n dispatch(setError(response.message));\n } else if (response.records) {\n dispatch(\n setRecords({\n entityName,\n records: response.records,\n params: queryParams,\n })\n );\n }\n } catch (err) {\n dispatch(\n setError(err instanceof Error ? err.message : \"Unknown error\")\n );\n } finally {\n dispatch(\n setOperationLoading({ operation: loadingKey, loading: false })\n );\n }\n },\n [natsConnected, orgId, entityName, recordState.params, dispatch, request]\n );\n\n const loadRecord = useCallback(\n async (recordId: string) => {\n if (!natsConnected || !orgId) return;\n\n const loadingKey = `load_${recordId}`;\n if (loadingStates[loadingKey]) return;\n\n dispatch(setOperationLoading({ operation: loadingKey, loading: true }));\n\n try {\n const response = await request<\n GetEntityRecordRequest,\n EntityRecordResponse\n >(EntityRecordGet, { entityName, recordId, orgId }, {});\n\n if (response instanceof Error) {\n dispatch(setError(response.message));\n return;\n }\n\n dispatch(setSelectedRecord({ record: response.record }));\n } finally {\n dispatch(\n setOperationLoading({ operation: loadingKey, loading: false })\n );\n }\n },\n [natsConnected, orgId, entityName, recordState.params, dispatch, request]\n );\n\n const createRecord = async (\n record: EntityRecord\n ): Promise<EntityRecordResponse> => {\n if (!natsConnected || !orgId) {\n throw new Error(\"Not connected or missing orgId\");\n }\n\n dispatch(\n setOperationLoading({ operation: \"create_record\", loading: true })\n );\n\n try {\n const response = await request<CreateRecordRequest, EntityRecordResponse>(\n EntityRecordCreate,\n {\n orgId,\n entityName,\n record,\n }\n );\n\n if (response instanceof Error) {\n throw response;\n }\n\n if (response.metadata.success) {\n dispatch(addRecord({ entityName, record: response.record }));\n }\n\n // Refresh list after create\n loadRecords();\n\n return response;\n } finally {\n dispatch(\n setOperationLoading({ operation: \"create_record\", loading: false })\n );\n }\n };\n\n const updateRecordById = async (\n record: EntityRecord\n ): Promise<EntityRecordResponse> => {\n if (!natsConnected || !orgId) {\n throw new Error(\"Not connected or missing orgId\");\n }\n\n dispatch(\n setOperationLoading({ operation: `update_${record.id}`, loading: true })\n );\n\n try {\n const response = await request<UpdateRecordRequest, EntityRecordResponse>(\n EntityRecordUpdate,\n {\n orgId,\n entityName,\n record,\n recordId: record.id,\n }\n );\n\n if (response instanceof Error) {\n throw response;\n }\n\n dispatch(updateRecord({ entityName, record: response.record }));\n return response;\n } finally {\n dispatch(\n setOperationLoading({\n operation: `update_${record.id}`,\n loading: false,\n })\n );\n }\n };\n\n const deleteRecordById = async (\n recordId: string\n ): Promise<ResponseMetadata> => {\n if (!natsConnected || !orgId) {\n throw new Error(\"Not connected or missing orgId\");\n }\n\n dispatch(\n setOperationLoading({ operation: `delete_${recordId}`, loading: true })\n );\n\n try {\n const response = await request<DeleteRecordRequest, ResponseMetadata>(\n EntityRecordDelete,\n {\n orgId,\n entityName,\n recordId,\n }\n );\n\n if (response instanceof Error) {\n throw response;\n }\n\n dispatch(removeRecord({ entityName, recordId }));\n return response;\n } finally {\n dispatch(\n setOperationLoading({ operation: `delete_${recordId}`, loading: false })\n );\n }\n };\n\n const countRecords = async (filters?: Record<string, any>): Promise<number> => {\n if (!natsConnected || !orgId) {\n throw new Error(\"Not connected or missing orgId\");\n }\n\n try {\n const response = await request<CountEntityRecordsRequest, CountEntityRecordsResponse>(\n EntityRecordCount,\n {\n orgId,\n entityName,\n filters: filters || {},\n }\n );\n\n if (response instanceof Error) {\n throw response;\n }\n\n if (!response.metadata?.success) {\n throw new Error(response.metadata?.error || \"Failed to count records\");\n }\n\n return response.count || 0;\n } catch (err) {\n console.error(\"Error counting records:\", err);\n return 0;\n }\n };\n\n const getEntityRecordById = async (\n recordId: string\n ): Promise<EntityRecord | null> => {\n if (!natsConnected || !orgId) {\n throw new Error(\"Not connected or missing orgId\");\n }\n\n try {\n const response = await request<\n GetEntityRecordRequest,\n EntityRecordResponse\n >(EntityRecordGet, { entityName, recordId, orgId }, {});\n\n if (response instanceof Error) {\n console.error(\"Error fetching record:\", response.message);\n return null;\n }\n\n return response.record || null;\n } catch (error) {\n console.error(\"Error in getEntityRecordById:\", error);\n return null;\n }\n };\n\n const selectRecords = (ids: string[]) => {\n dispatch(setSelected({ entityName, ids }));\n };\n\n const clearSelection = () => {\n dispatch(setSelected({ entityName, ids: [] }));\n };\n\n const updateParams = (params: Partial<EntityQuery>) => {\n console.log(\"updating query params\", params);\n dispatch(updateQueryParams({ entityName, params }));\n loadRecords(params);\n };\n\n const refresh = useCallback(() => {\n loadRecords();\n }, [loadRecords]);\n\n useEffect(() => {\n let mounted = true;\n\n if (autoLoad && natsConnected && orgId && mounted) {\n loadRecords();\n }\n\n return () => {\n mounted = false;\n };\n }, [autoLoad, natsConnected, orgId]);\n\n return {\n // State\n records: recordState.items,\n params: recordState.params,\n selected: recordState.selected,\n selectedRecord,\n isLoading,\n loadingStates,\n error,\n\n // Operations\n loadRecords,\n createRecord,\n updateRecord: updateRecordById,\n deleteRecord: deleteRecordById,\n loadRecord,\n countRecords,\n getEntityRecordById,\n // Selection\n selectRecords,\n clearSelection,\n\n // Query\n updateParams,\n refresh,\n };\n}\n","// store/entity-record-slice.ts\nimport { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { EntityQuery, EntityRecord, EntityView, ListResult } from \"../models\";\n\nexport interface EntityRecordState {\n records: {\n [entityName: string]: {\n items: Record<string, EntityRecord>;\n params: EntityQuery;\n meta: ListResult<EntityRecord>;\n selected: string[]; // Selected record IDs\n };\n };\n selectedRecord?: EntityRecord;\n activeView?: EntityView;\n isLoading: boolean;\n error?: string;\n loadingStates: Record<string, boolean>;\n}\n\nexport interface EntityRecordSelector {\n entityRecord: EntityRecordState;\n}\n\nconst initialState: EntityRecordState = {\n records: {},\n isLoading: false,\n loadingStates: {},\n};\n\nconst entityRecordSlice = createSlice({\n name: \"entityRecord\",\n initialState,\n reducers: {\n setLoading: (state, action: PayloadAction<boolean>) => {\n state.isLoading = action.payload;\n },\n\n setOperationLoading: (\n state,\n action: PayloadAction<{ operation: string; loading: boolean }>\n ) => {\n state.loadingStates[action.payload.operation] = action.payload.loading;\n },\n\n setError: (state, action: PayloadAction<string | undefined>) => {\n state.error = action.payload;\n },\n\n setRecords: (\n state,\n action: PayloadAction<{\n entityName: string;\n records: ListResult<EntityRecord>;\n params: EntityQuery;\n }>\n ) => {\n const { entityName, records, params } = action.payload;\n state.records[entityName] = {\n items: records.items.reduce(\n (acc, record) => {\n acc[record.id] = record;\n return acc;\n },\n {} as Record<string, EntityRecord>\n ),\n params,\n meta: records,\n selected: [],\n };\n },\n\n addRecord: (\n state,\n action: PayloadAction<{ entityName: string; record: EntityRecord }>\n ) => {\n const { entityName, record } = action.payload;\n if (state.records[entityName]) {\n state.records[entityName].items[record.id] = record;\n }\n },\n\n updateRecord: (\n state,\n action: PayloadAction<{ entityName: string; record: EntityRecord }>\n ) => {\n const { entityName, record } = action.payload;\n if (state.records[entityName]) {\n state.records[entityName].items[record.id] = record;\n }\n },\n\n removeRecord: (\n state,\n action: PayloadAction<{ entityName: string; recordId: string }>\n ) => {\n const { entityName, recordId } = action.payload;\n if (state.records[entityName]) {\n delete state.records[entityName].items[recordId];\n state.records[entityName].selected = state.records[\n entityName\n ].selected.filter((id) => id !== recordId);\n }\n },\n\n setSelected: (\n state,\n action: PayloadAction<{ entityName: string; ids: string[] }>\n ) => {\n const { entityName, ids } = action.payload;\n if (state.records[entityName]) {\n state.records[entityName].selected = ids;\n }\n },\n\n setActiveView: (state, action: PayloadAction<EntityView | undefined>) => {\n state.activeView = action.payload;\n },\n\n updateQueryParams: (\n state,\n action: PayloadAction<{\n entityName: string;\n params: Partial<EntityQuery>;\n }>\n ) => {\n const { entityName, params } = action.payload;\n if (state.records[entityName]) {\n state.records[entityName].params = {\n ...state.records[entityName].params,\n ...params,\n };\n }\n },\n\n setSelectedRecord: (\n state,\n action: PayloadAction<{ record: EntityRecord }>\n ) => {\n const { record } = action.payload;\n state.selectedRecord = record;\n },\n },\n});\n\nexport const {\n setLoading,\n setOperationLoading,\n setError,\n setRecords,\n addRecord,\n updateRecord,\n removeRecord,\n setSelected,\n setSelectedRecord,\n setActiveView,\n updateQueryParams,\n} = entityRecordSlice.actions;\n\nexport const entityRecordReducer = entityRecordSlice.reducer;\n","\"use client\";\n\nimport { useCallback, useRef } from 'react';\n\nexport function useDebounce<T extends (...args: any[]) => any>(\n callback: T,\n delay: number\n): (...args: Parameters<T>) => void {\n const timerRef = useRef<NodeJS.Timeout | null>(null);\n\n return useCallback((...args: Parameters<T>) => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n\n timerRef.current = setTimeout(() => {\n callback(...args);\n }, delay);\n }, [callback, delay]);\n}\n\n","\"use client\";\n\nimport React, { createContext, useContext, useMemo } from \"react\";\nimport { useEntityRecord, UseEntityRecordType } from \"../hooks\";\n\nexport const EntityRecordContext = createContext<\n UseEntityRecordType | undefined\n>(undefined);\n\nexport interface EntityRecordProviderProps {\n children: React.ReactNode;\n orgId: string;\n entityName: string;\n options?: {\n autoLoad?: boolean;\n };\n}\n\nexport function EntityRecordProvider({\n children,\n orgId,\n entityName,\n options = {},\n}: EntityRecordProviderProps) {\n const hookValue = useEntityRecord(orgId, entityName, options);\n const value = useMemo(() => hookValue, [hookValue]);\n\n return (\n <EntityRecordContext.Provider value={value}>\n {children}\n </EntityRecordContext.Provider>\n );\n}\n\nexport function useEntityRecordContext() {\n const context = useContext(EntityRecordContext);\n\n if (!context) {\n throw new Error(\n \"useEntityRecordContext must be used within an EntityRecordProvider\"\n );\n }\n\n return context;\n}\n","// Predefined colors with their display names\nexport const PREDEFINED_COLORS = [\n { value: \"#EF4444\", name: \"Red\" },\n { value: \"#F97316\", name: \"Orange\" },\n { value: \"#EAB308\", name: \"Yellow\" },\n { value: \"#22C55E\", name: \"Green\" },\n { value: \"#06B6D4\", name: \"Cyan\" },\n { value: \"#3B82F6\", name: \"Blue\" },\n { value: \"#6366F1\", name: \"Indigo\" },\n { value: \"#A855F7\", name: \"Purple\" },\n];\n"],"mappings":"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","names":["entityName","useCallback","useEffect","useCallback","useEffect","useCallback","useEffect","useDispatch","useSelector","useNatsContext","createSlice","initialState","setLoading","setOperationLoading","setError","useNatsContext","useDispatch","useSelector","useCallback","setOperationLoading","setError","error","useEffect","useCallback","createContext","useContext","useMemo","jsx","createContext","useMemo","useContext"]}
|
|
1
|
+
{"version":3,"sources":["../context/entity-definition-context.tsx","../hooks/use-entity-definition.ts","../store/entity-definition-slice.ts","../hooks/use-entity-definition-details.ts","../hooks/use-entity-record.ts","../store/entity-record-slice.ts","../hooks/use-debounce.ts","../context/entity-record-context.tsx","../consts/colors.ts"],"sourcesContent":["\"use client\";\n\nimport React, { createContext, useContext, useMemo } from \"react\";\nimport {\n useEntityDefinition,\n UseEntityDefinitionType,\n UseEntityDefinitionOptions,\n} from \"../hooks\";\n\nexport const EntityDefinitionContext = createContext<\n UseEntityDefinitionType | undefined\n>(undefined);\n\nexport interface EntityDefinitionProviderProps {\n children: React.ReactNode;\n orgId: string;\n entityName?: string;\n options?: UseEntityDefinitionOptions;\n}\n\nexport function EntityDefinitionProvider({\n children,\n orgId,\n entityName,\n options = {},\n}: EntityDefinitionProviderProps) {\n const hookValue = useEntityDefinition(orgId, entityName, options);\n const value = useMemo(() => hookValue, [hookValue]);\n\n return (\n <EntityDefinitionContext.Provider value={value}>\n {children}\n </EntityDefinitionContext.Provider>\n );\n}\n\nexport function useEntityDefinitionContext() {\n const context = useContext(EntityDefinitionContext);\n\n if (!context) {\n throw new Error(\n \"useEntityDefinitionContext must be used within an EntityDefinitionProvider\"\n );\n }\n\n return context;\n}\n","\"use client\";\n\nimport { useCallback, useEffect } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useNatsContext } from \"@elqnt/nats\";\nimport {\n CreateEntityDefinitionRequest,\n CreateOrgSchemaRequest,\n CreateOrgSchemaResponse,\n CreateViewRequest,\n DropOrgSchemaRequest,\n DropOrgSchemaResponse,\n DeleteEntityDefinitionRequest,\n DeleteViewRequest,\n EntityDefinition,\n EntityDefinitionCreate,\n EntityDefinitionDelete,\n EntityDefinitionGet,\n EntityDefinitionList,\n EntityDefinitionResponse,\n EntityDefinitionUpdate,\n EntityOrgSchemaCreate,\n EntityOrgSchemaDrop,\n EntityView,\n EntityViewCreate,\n EntityViewDelete,\n EntityViewList,\n EntityViewResponse,\n EntityViewUpdate,\n GetEntityDefinitionRequest,\n ListEntityDefinitionsRequest,\n ListEntityDefinitionsResponse,\n ListViewsRequest,\n ListViewsResponse,\n ResponseMetadata,\n UpdateEntityDefinitionRequest,\n UpdateViewRequest,\n} from \"../models\";\nimport {\n addDefinition,\n addView,\n EntityDefinitionSelector,\n removeDefinition,\n removeView,\n setDefinitions,\n setError,\n setLoading,\n setOperationLoading,\n setSelectedDefinition,\n setViews,\n updateDefinition,\n updateView,\n} from \"../store/entity-definition-slice\";\n\nexport type UseEntityDefinitionType = {\n // State\n definitions: Record<string, EntityDefinition>;\n selectedDefinition?: EntityDefinition;\n views: Record<string, EntityView[]>;\n selectedView?: EntityView;\n isLoading: boolean;\n loadingStates: Record<string, boolean>;\n error?: string;\n\n // Organization operations\n createOrgSchema: (orgId: string) => Promise<CreateOrgSchemaResponse>;\n dropOrgSchema: (orgId: string) => Promise<DropOrgSchemaResponse>;\n\n // Definition operations\n loadDefinitions: () => Promise<void>;\n loadDefinition: (name: string) => Promise<void>;\n createDefinition: (\n definition: EntityDefinition\n ) => Promise<EntityDefinitionResponse>;\n updateDefinition: (\n name: string,\n definition: EntityDefinition\n ) => Promise<EntityDefinitionResponse>;\n deleteDefinition: (name: string) => Promise<ResponseMetadata>;\n\n // View operations\n loadViews: (entityName: string) => Promise<void>;\n createView: (entityName: string, view: EntityView) => Promise<EntityView>;\n updateView: (entityName: string, view: EntityView) => Promise<EntityView>;\n deleteView: (\n entityName: string,\n viewId: string\n ) => Promise<{ success: boolean }>;\n\n // Utilities\n refresh: () => void;\n};\n\nexport interface UseEntityDefinitionOptions {\n autoLoad?: boolean;\n module?: string;\n}\n\n// todo: performance improvement: use selectors\n// const selectEntityDefinition = (state: EntityDefinitionSelector) => state.entityDefinition;\n\nexport function useEntityDefinition(\n orgId: string | undefined,\n entityName?: string,\n options: UseEntityDefinitionOptions = {}\n): UseEntityDefinitionType {\n const { autoLoad, module } = options;\n const { natsConnected, request } = useNatsContext();\n const dispatch = useDispatch();\n\n // todo: performance improvement: use selectors\n\n // const selectDefinitions = createSelector(\n // selectEntityDefinition,\n // (state) => state.definitions\n // );\n // const selectSelectedDefinition = createSelector(\n // selectEntityDefinition,\n // (state) => state.selectedDefinition\n // );\n\n // // Similar selectors for views, selectedView, isLoading, loadingStates, error...\n\n // // In the hook\n // const definitions = useSelector(selectDefinitions);\n // const selectedDefinition = useSelector(selectSelectedDefinition);\n // const views = useSelector(selectViews);\n\n const definitions = useSelector(\n (state: EntityDefinitionSelector) => state.entityDefinition.definitions\n );\n const selectedDefinition = useSelector(\n (state: EntityDefinitionSelector) =>\n state.entityDefinition.selectedDefinition\n );\n const views = useSelector(\n (state: EntityDefinitionSelector) => state.entityDefinition.views\n );\n const selectedView = useSelector(\n (state: EntityDefinitionSelector) => state.entityDefinition.selectedView\n );\n const isLoading = useSelector(\n (state: EntityDefinitionSelector) => state.entityDefinition.isLoading\n );\n const loadingStates = useSelector(\n (state: EntityDefinitionSelector) => state.entityDefinition.loadingStates\n );\n const error = useSelector(\n (state: EntityDefinitionSelector) => state.entityDefinition.error\n );\n\n const createOrgSchema = useCallback(\n async (targetOrgId: string): Promise<CreateOrgSchemaResponse> => {\n if (!natsConnected) {\n throw new Error(\"Not connected to NATS\");\n }\n\n dispatch(setOperationLoading({ operation: \"createOrgSchema\", loading: true }));\n\n try {\n const response = await request<\n CreateOrgSchemaRequest,\n CreateOrgSchemaResponse\n >(EntityOrgSchemaCreate, { orgId: targetOrgId });\n\n if (response instanceof Error) {\n throw response;\n }\n\n return response;\n } finally {\n dispatch(setOperationLoading({ operation: \"createOrgSchema\", loading: false }));\n }\n },\n [natsConnected, dispatch, request]\n );\n\n const dropOrgSchema = useCallback(\n async (targetOrgId: string): Promise<DropOrgSchemaResponse> => {\n if (!natsConnected) {\n throw new Error(\"Not connected to NATS\");\n }\n\n dispatch(setOperationLoading({ operation: \"dropOrgSchema\", loading: true }));\n\n try {\n const response = await request<\n DropOrgSchemaRequest,\n DropOrgSchemaResponse\n >(EntityOrgSchemaDrop, { orgId: targetOrgId });\n\n if (response instanceof Error) {\n throw response;\n }\n\n return response;\n } finally {\n dispatch(setOperationLoading({ operation: \"dropOrgSchema\", loading: false }));\n }\n },\n [natsConnected, dispatch, request]\n );\n\n const loadDefinitions = useCallback(async () => {\n if (!natsConnected || !orgId) return;\n\n const loadingKey = \"loadDefinitions\";\n if (loadingStates[loadingKey]) return; // Prevent concurrent loads\n\n dispatch(setOperationLoading({ operation: loadingKey, loading: true }));\n\n try {\n const response = await request<\n ListEntityDefinitionsRequest,\n ListEntityDefinitionsResponse\n >(EntityDefinitionList, { orgId, module });\n\n if (response instanceof Error) {\n dispatch(setError(response.message));\n } else {\n dispatch(setDefinitions(response?.definitions ?? []));\n }\n } catch (err) {\n dispatch(setError(err instanceof Error ? err.message : \"Unknown error\"));\n } finally {\n dispatch(setOperationLoading({ operation: loadingKey, loading: false }));\n }\n }, [natsConnected, orgId, options.module, dispatch, request]);\n\n useEffect(() => {\n let mounted = true;\n\n if (autoLoad && natsConnected && orgId && mounted) {\n loadDefinitions();\n }\n\n return () => {\n mounted = false;\n };\n }, [autoLoad, natsConnected, orgId]);\n\n const loadDefinition = useCallback(\n async (name: string) => {\n if (!natsConnected || !orgId) return;\n\n dispatch(\n setOperationLoading({ operation: `load_${name}`, loading: true })\n );\n try {\n const response = await request<\n GetEntityDefinitionRequest,\n EntityDefinitionResponse\n >(EntityDefinitionGet, { entityName: name, orgId }, {});\n\n if (response instanceof Error) {\n dispatch(setError(response.message));\n return;\n }\n\n dispatch(setSelectedDefinition(response.definition));\n } finally {\n dispatch(\n setOperationLoading({ operation: `load_${name}`, loading: false })\n );\n }\n },\n [natsConnected, orgId, dispatch, request]\n );\n\n useEffect(() => {\n if (natsConnected && orgId && entityName) {\n loadDefinition(entityName);\n }\n }, [natsConnected, orgId, entityName, loadDefinition]);\n\n const createDefinition = async (definition: EntityDefinition) => {\n if (!natsConnected || !orgId) {\n throw new Error(\"Not connected or missing orgId\");\n }\n\n dispatch(setOperationLoading({ operation: \"create\", loading: true }));\n\n try {\n const response = await request<\n CreateEntityDefinitionRequest,\n EntityDefinitionResponse\n >(EntityDefinitionCreate, { definition, orgId }, {});\n\n // console.log(\"createDefinition response\", response);\n\n if (response instanceof Error) {\n console.error(\"createDefinition error\", response);\n throw response;\n }\n\n if (response.metadata.success) {\n dispatch(addDefinition(response.definition));\n }\n return response;\n } finally {\n dispatch(setOperationLoading({ operation: \"create\", loading: false }));\n }\n };\n\n const updateDefinitionById = async (\n name: string,\n definition: EntityDefinition\n ) => {\n if (!natsConnected || !orgId) {\n throw new Error(\"Not connected or missing orgId\");\n }\n\n dispatch(\n setOperationLoading({ operation: `update_${name}`, loading: true })\n );\n try {\n const response = await request<\n UpdateEntityDefinitionRequest,\n EntityDefinitionResponse\n >(\n EntityDefinitionUpdate,\n {\n entityName: name,\n definition,\n orgId,\n },\n {}\n );\n\n if (response instanceof Error) {\n throw response;\n }\n\n if (response.metadata.success) {\n dispatch(updateDefinition(response.definition));\n }\n\n return response;\n } finally {\n dispatch(\n setOperationLoading({ operation: `update_${name}`, loading: false })\n );\n }\n };\n\n const deleteDefinition = async (name: string) => {\n if (!natsConnected || !orgId) {\n throw new Error(\"Not connected or missing orgId\");\n }\n\n dispatch(\n setOperationLoading({ operation: `delete_${name}`, loading: true })\n );\n try {\n const response = await request<\n DeleteEntityDefinitionRequest,\n ResponseMetadata\n >(EntityDefinitionDelete, { entityName: name, orgId }, {});\n\n if (response instanceof Error) {\n throw response;\n }\n\n dispatch(removeDefinition(name));\n return response;\n } finally {\n dispatch(\n setOperationLoading({ operation: `delete_${name}`, loading: false })\n );\n }\n };\n\n const loadViews = useCallback(\n async (entityName: string): Promise<void> => {\n if (!natsConnected || !orgId) return;\n\n const loadingKey = `loadViews_${entityName}`;\n if (loadingStates[loadingKey]) return; // Prevent concurrent loads\n\n dispatch(setOperationLoading({ operation: loadingKey, loading: true }));\n\n try {\n const response = await request<ListViewsRequest, ListViewsResponse>(\n EntityViewList,\n { entityName, orgId },\n {}\n );\n\n console.log(\"loadViews response\", response);\n\n if (response instanceof Error) {\n dispatch(setError(response.message));\n return;\n }\n\n dispatch(setViews({ entityName, views: response.views }));\n } catch (err) {\n dispatch(\n setError(err instanceof Error ? err.message : \"Unknown error\")\n );\n } finally {\n dispatch(\n setOperationLoading({ operation: loadingKey, loading: false })\n );\n }\n },\n [natsConnected, orgId, loadingStates, dispatch, request]\n );\n\n const createView = async (entityName: string, view: EntityView) => {\n if (!natsConnected || !orgId) {\n throw new Error(\"Not connected or missing orgId\");\n }\n\n dispatch(setOperationLoading({ operation: \"create_view\", loading: true }));\n try {\n const response = await request<CreateViewRequest, EntityViewResponse>(\n EntityViewCreate,\n { entityName, view, orgId },\n {}\n );\n\n if (response instanceof Error) {\n throw response;\n }\n\n dispatch(addView({ entityName, view: response.view }));\n return response.view;\n } finally {\n dispatch(\n setOperationLoading({ operation: \"create_view\", loading: false })\n );\n }\n };\n\n const updateViewById = async (entityName: string, view: EntityView) => {\n if (!natsConnected || !orgId || !view.id) {\n throw new Error(\"Not connected, missing orgId, or invalid view\");\n }\n\n dispatch(\n setOperationLoading({\n operation: `update_view_${view.id}`,\n loading: true,\n })\n );\n try {\n const response = await request<UpdateViewRequest, EntityViewResponse>(\n EntityViewUpdate,\n { view, orgId },\n {}\n );\n\n if (response instanceof Error) {\n throw response;\n }\n\n // console.log(\"updateViewById response\", response);\n\n dispatch(updateView({ entityName, view: response.view }));\n return response.view;\n } finally {\n dispatch(\n setOperationLoading({\n operation: `update_view_${view.id}`,\n loading: false,\n })\n );\n }\n };\n\n const deleteView = async (entityName: string, viewId: string) => {\n if (!natsConnected || !orgId) {\n throw new Error(\"Not connected or missing orgId\");\n }\n\n dispatch(\n setOperationLoading({ operation: `delete_view_${viewId}`, loading: true })\n );\n try {\n const response = await request<DeleteViewRequest, ResponseMetadata>(\n EntityViewDelete,\n { viewId, orgId },\n {}\n );\n\n if (response instanceof Error) {\n throw response;\n }\n\n dispatch(removeView({ entityName, viewId }));\n return response;\n } finally {\n dispatch(\n setOperationLoading({\n operation: `delete_view_${viewId}`,\n loading: false,\n })\n );\n }\n };\n\n const refresh = useCallback(() => {\n if (!natsConnected || !orgId) return;\n\n if (entityName) {\n loadDefinition(entityName);\n } else {\n dispatch(setLoading(true));\n loadDefinitions().finally(() => dispatch(setLoading(false)));\n }\n }, [natsConnected, orgId, entityName, loadDefinition, dispatch]);\n\n return {\n // State\n definitions,\n selectedDefinition,\n views,\n selectedView,\n isLoading,\n loadingStates,\n error,\n\n // Organization operations\n createOrgSchema,\n dropOrgSchema,\n\n // Definition operations\n loadDefinitions,\n loadDefinition,\n createDefinition,\n updateDefinition: updateDefinitionById,\n deleteDefinition,\n\n // View operations\n loadViews,\n createView,\n updateView: updateViewById,\n deleteView,\n\n // Utilities\n refresh,\n };\n}\n","// store/entityDefinitionSlice.ts\nimport { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { EntityDefinition, EntityView } from \"../models\";\nexport interface EntityDefinitionState {\n definitions: Record<string, EntityDefinition>;\n selectedDefinition?: EntityDefinition;\n views: Record<string, EntityView[]>;\n selectedView?: EntityView;\n isLoading: boolean;\n error?: string;\n loadingStates: Record<string, boolean>;\n}\n\nexport interface EntityDefinitionSelector {\n entityDefinition: EntityDefinitionState;\n}\n\nconst initialState: EntityDefinitionState = {\n definitions: {},\n views: {},\n isLoading: false,\n loadingStates: {},\n};\n\nconst entityDefinitionSlice = createSlice({\n name: \"entityDefinition\",\n initialState,\n reducers: {\n setLoading: (state, action: PayloadAction<boolean>) => {\n state.isLoading = action.payload;\n },\n setOperationLoading: (\n state,\n action: PayloadAction<{ operation: string; loading: boolean }>\n ) => {\n state.loadingStates[action.payload.operation] = action.payload.loading;\n },\n setError: (state, action: PayloadAction<string | undefined>) => {\n state.error = action.payload;\n },\n setDefinitions: (state, action: PayloadAction<EntityDefinition[]>) => {\n state.definitions = action.payload.reduce(\n (acc, def) => {\n acc[def.name] = def;\n return acc;\n },\n {} as Record<string, EntityDefinition>\n );\n },\n addDefinition: (state, action: PayloadAction<EntityDefinition>) => {\n const definition = action.payload;\n state.definitions[definition.name] = definition;\n },\n updateDefinition: (state, action: PayloadAction<EntityDefinition>) => {\n const definition = action.payload;\n state.definitions[definition.name] = definition;\n if (state.selectedDefinition?.name === definition.name) {\n state.selectedDefinition = definition;\n }\n },\n removeDefinition: (state, action: PayloadAction<string>) => {\n delete state.definitions[action.payload];\n if (state.selectedDefinition?.name === action.payload) {\n state.selectedDefinition = undefined;\n }\n },\n setSelectedDefinition: (\n state,\n action: PayloadAction<EntityDefinition | undefined>\n ) => {\n state.selectedDefinition = action.payload;\n },\n setViews: (\n state,\n action: PayloadAction<{ entityName: string; views: EntityView[] }>\n ) => {\n const { entityName, views } = action.payload;\n state.views[entityName] = views;\n },\n addView: (\n state,\n action: PayloadAction<{ entityName: string; view: EntityView }>\n ) => {\n const { entityName, view } = action.payload;\n if (!state.views[entityName]) {\n state.views[entityName] = [];\n }\n state.views[entityName].push(view);\n },\n updateView: (\n state,\n action: PayloadAction<{ entityName: string; view: EntityView }>\n ) => {\n const { entityName, view } = action.payload;\n const views = state.views[entityName];\n if (views) {\n const index = views.findIndex((v) => v.id === view.id);\n if (index !== -1) {\n views[index] = view;\n if (state.selectedView?.id === view.id) {\n state.selectedView = view;\n }\n }\n }\n },\n removeView: (\n state,\n action: PayloadAction<{ entityName: string; viewId: string }>\n ) => {\n const { entityName, viewId } = action.payload;\n const views = state.views[entityName];\n if (views) {\n state.views[entityName] = views.filter((v) => v.id !== viewId);\n if (state.selectedView?.id === viewId) {\n state.selectedView = undefined;\n }\n }\n },\n setSelectedView: (state, action: PayloadAction<EntityView | undefined>) => {\n state.selectedView = action.payload;\n },\n },\n});\n\nexport const {\n setLoading,\n setOperationLoading,\n setError,\n setDefinitions,\n addDefinition,\n updateDefinition,\n removeDefinition,\n setSelectedDefinition,\n setViews,\n addView,\n updateView,\n removeView,\n setSelectedView,\n} = entityDefinitionSlice.actions;\n\nexport const entityDefinitionReducer = entityDefinitionSlice.reducer;\n","\"use client\";\n\nimport { useCallback, useEffect } from \"react\";\nimport { useEntityDefinitionContext } from \"../context/entity-definition-context\";\nimport { EntityDefinition } from \"../models\";\n\nexport function useEntityDefinitionDetails(entityName: string) {\n const context = useEntityDefinitionContext();\n const definition = context.definitions[entityName];\n\n const loadDefinitionDetails = useCallback(async () => {\n return context.loadDefinition(entityName);\n }, [context, entityName]);\n\n useEffect(() => {\n if (entityName && !definition) {\n loadDefinitionDetails();\n }\n }, [definition, entityName, loadDefinitionDetails]);\n\n return {\n definition,\n isLoading: context.loadingStates[`load_${entityName}`],\n error: context.error,\n updateDefinition: (updatedDef: EntityDefinition) =>\n context.updateDefinition(entityName, updatedDef),\n deleteDefinition: () => context.deleteDefinition(entityName),\n refresh: loadDefinitionDetails,\n };\n}\n","\"use client\";\n\nimport { useCallback, useEffect } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useNatsContext } from \"@elqnt/nats\";\nimport {\n CreateRecordRequest,\n DeleteRecordRequest,\n EntityQuery,\n EntityRecord,\n EntityRecordCreate,\n EntityRecordDelete,\n EntityRecordGet,\n EntityRecordQuery,\n EntityRecordCount,\n EntityRecordResponse,\n EntityRecordUpdate,\n GetEntityRecordRequest,\n ListEntityRecordsResponse,\n QueryRequest,\n ResponseMetadata,\n UpdateRecordRequest,\n CountEntityRecordsRequest,\n CountEntityRecordsResponse,\n} from \"../models\";\nimport {\n addRecord,\n EntityRecordSelector,\n removeRecord,\n setError,\n setOperationLoading,\n setRecords,\n setSelected,\n setSelectedRecord,\n updateQueryParams,\n updateRecord,\n} from \"../store/entity-record-slice\";\n\nexport type UseEntityRecordType = {\n // State\n records: Record<string, EntityRecord>;\n selectedRecord?: EntityRecord;\n params: EntityQuery;\n selected: string[];\n isLoading: boolean;\n loadingStates: Record<string, boolean>;\n error?: string;\n\n // Operations\n loadRecords: (params?: Partial<EntityQuery>) => Promise<void>;\n createRecord: (record: EntityRecord) => Promise<EntityRecordResponse>;\n updateRecord: (record: EntityRecord) => Promise<EntityRecordResponse>;\n deleteRecord: (recordId: string) => Promise<ResponseMetadata>;\n loadRecord: (recordId: string) => Promise<void>;\n countRecords: (filters?: Record<string, any>) => Promise<number>;\n getEntityRecordById: (recordId: string) => Promise<EntityRecord | null>;\n\n\n // Selection\n selectRecords: (ids: string[]) => void;\n clearSelection: () => void;\n\n // Query\n updateParams: (params: Partial<EntityQuery>) => void;\n refresh: () => void;\n};\n\nconst defaultQuery: EntityQuery = {\n filters: {},\n page: 1,\n pageSize: 25,\n sortBy: \"metadata.createdAt\",\n sortOrder: -1,\n};\n\nexport function useEntityRecord(\n orgId: string | undefined,\n entityName: string,\n options: { autoLoad?: boolean } = {}\n): UseEntityRecordType {\n const { autoLoad = true } = options;\n const { natsConnected, request } = useNatsContext();\n const dispatch = useDispatch();\n\n const recordState = useSelector(\n (state: EntityRecordSelector) =>\n state.entityRecord.records[entityName] || {\n items: {},\n params: defaultQuery,\n meta: {\n items: [],\n totalCount: 0,\n currentPage: 1,\n pageSize: 25,\n totalPages: 0,\n },\n selected: [],\n }\n );\n\n const selectedRecord = useSelector(\n (state: EntityRecordSelector) => state.entityRecord.selectedRecord\n );\n\n const isLoading = useSelector(\n (state: EntityRecordSelector) => state.entityRecord.isLoading\n );\n const loadingStates = useSelector(\n (state: EntityRecordSelector) => state.entityRecord.loadingStates\n );\n const error = useSelector(\n (state: EntityRecordSelector) => state.entityRecord.error\n );\n\n const loadRecords = useCallback(\n async (params?: Partial<EntityQuery>) => {\n if (!natsConnected || !orgId) return;\n\n const loadingKey = `load_${entityName}`;\n if (loadingStates[loadingKey]) return;\n\n dispatch(setOperationLoading({ operation: loadingKey, loading: true }));\n\n try {\n const queryParams = { ...recordState.params, ...params };\n // console.log(\"will loadRecords\", queryParams);\n\n const response = await request<QueryRequest, ListEntityRecordsResponse>(\n EntityRecordQuery,\n {\n orgId,\n entityName,\n query: queryParams,\n }\n );\n\n if (response instanceof Error) {\n dispatch(setError(response.message));\n } else if (response.records) {\n dispatch(\n setRecords({\n entityName,\n records: response.records,\n params: queryParams,\n })\n );\n }\n } catch (err) {\n dispatch(\n setError(err instanceof Error ? err.message : \"Unknown error\")\n );\n } finally {\n dispatch(\n setOperationLoading({ operation: loadingKey, loading: false })\n );\n }\n },\n [natsConnected, orgId, entityName, recordState.params, dispatch, request]\n );\n\n const loadRecord = useCallback(\n async (recordId: string) => {\n if (!natsConnected || !orgId) return;\n\n const loadingKey = `load_${recordId}`;\n if (loadingStates[loadingKey]) return;\n\n dispatch(setOperationLoading({ operation: loadingKey, loading: true }));\n\n try {\n const response = await request<\n GetEntityRecordRequest,\n EntityRecordResponse\n >(EntityRecordGet, { entityName, recordId, orgId }, {});\n\n if (response instanceof Error) {\n dispatch(setError(response.message));\n return;\n }\n\n dispatch(setSelectedRecord({ record: response.record }));\n } finally {\n dispatch(\n setOperationLoading({ operation: loadingKey, loading: false })\n );\n }\n },\n [natsConnected, orgId, entityName, recordState.params, dispatch, request]\n );\n\n const createRecord = async (\n record: EntityRecord\n ): Promise<EntityRecordResponse> => {\n if (!natsConnected || !orgId) {\n throw new Error(\"Not connected or missing orgId\");\n }\n\n dispatch(\n setOperationLoading({ operation: \"create_record\", loading: true })\n );\n\n try {\n const response = await request<CreateRecordRequest, EntityRecordResponse>(\n EntityRecordCreate,\n {\n orgId,\n entityName,\n record,\n }\n );\n\n if (response instanceof Error) {\n throw response;\n }\n\n if (response.metadata.success) {\n dispatch(addRecord({ entityName, record: response.record }));\n }\n\n // Refresh list after create\n loadRecords();\n\n return response;\n } finally {\n dispatch(\n setOperationLoading({ operation: \"create_record\", loading: false })\n );\n }\n };\n\n const updateRecordById = async (\n record: EntityRecord\n ): Promise<EntityRecordResponse> => {\n if (!natsConnected || !orgId) {\n throw new Error(\"Not connected or missing orgId\");\n }\n\n dispatch(\n setOperationLoading({ operation: `update_${record.id}`, loading: true })\n );\n\n try {\n const response = await request<UpdateRecordRequest, EntityRecordResponse>(\n EntityRecordUpdate,\n {\n orgId,\n entityName,\n record,\n recordId: record.id,\n }\n );\n\n if (response instanceof Error) {\n throw response;\n }\n\n dispatch(updateRecord({ entityName, record: response.record }));\n return response;\n } finally {\n dispatch(\n setOperationLoading({\n operation: `update_${record.id}`,\n loading: false,\n })\n );\n }\n };\n\n const deleteRecordById = async (\n recordId: string\n ): Promise<ResponseMetadata> => {\n if (!natsConnected || !orgId) {\n throw new Error(\"Not connected or missing orgId\");\n }\n\n dispatch(\n setOperationLoading({ operation: `delete_${recordId}`, loading: true })\n );\n\n try {\n const response = await request<DeleteRecordRequest, ResponseMetadata>(\n EntityRecordDelete,\n {\n orgId,\n entityName,\n recordId,\n }\n );\n\n if (response instanceof Error) {\n throw response;\n }\n\n dispatch(removeRecord({ entityName, recordId }));\n return response;\n } finally {\n dispatch(\n setOperationLoading({ operation: `delete_${recordId}`, loading: false })\n );\n }\n };\n\n const countRecords = async (filters?: Record<string, any>): Promise<number> => {\n if (!natsConnected || !orgId) {\n throw new Error(\"Not connected or missing orgId\");\n }\n\n try {\n const response = await request<CountEntityRecordsRequest, CountEntityRecordsResponse>(\n EntityRecordCount,\n {\n orgId,\n entityName,\n filters: filters || {},\n }\n );\n\n if (response instanceof Error) {\n throw response;\n }\n\n if (!response.metadata?.success) {\n throw new Error(response.metadata?.error || \"Failed to count records\");\n }\n\n return response.count || 0;\n } catch (err) {\n console.error(\"Error counting records:\", err);\n return 0;\n }\n };\n\n const getEntityRecordById = async (\n recordId: string\n ): Promise<EntityRecord | null> => {\n if (!natsConnected || !orgId) {\n throw new Error(\"Not connected or missing orgId\");\n }\n\n try {\n const response = await request<\n GetEntityRecordRequest,\n EntityRecordResponse\n >(EntityRecordGet, { entityName, recordId, orgId }, {});\n\n if (response instanceof Error) {\n console.error(\"Error fetching record:\", response.message);\n return null;\n }\n\n return response.record || null;\n } catch (error) {\n console.error(\"Error in getEntityRecordById:\", error);\n return null;\n }\n };\n\n const selectRecords = (ids: string[]) => {\n dispatch(setSelected({ entityName, ids }));\n };\n\n const clearSelection = () => {\n dispatch(setSelected({ entityName, ids: [] }));\n };\n\n const updateParams = (params: Partial<EntityQuery>) => {\n console.log(\"updating query params\", params);\n dispatch(updateQueryParams({ entityName, params }));\n loadRecords(params);\n };\n\n const refresh = useCallback(() => {\n loadRecords();\n }, [loadRecords]);\n\n useEffect(() => {\n let mounted = true;\n\n if (autoLoad && natsConnected && orgId && mounted) {\n loadRecords();\n }\n\n return () => {\n mounted = false;\n };\n }, [autoLoad, natsConnected, orgId]);\n\n return {\n // State\n records: recordState.items,\n params: recordState.params,\n selected: recordState.selected,\n selectedRecord,\n isLoading,\n loadingStates,\n error,\n\n // Operations\n loadRecords,\n createRecord,\n updateRecord: updateRecordById,\n deleteRecord: deleteRecordById,\n loadRecord,\n countRecords,\n getEntityRecordById,\n // Selection\n selectRecords,\n clearSelection,\n\n // Query\n updateParams,\n refresh,\n };\n}\n","// store/entity-record-slice.ts\nimport { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { EntityQuery, EntityRecord, EntityView, ListResult } from \"../models\";\n\nexport interface EntityRecordState {\n records: {\n [entityName: string]: {\n items: Record<string, EntityRecord>;\n params: EntityQuery;\n meta: ListResult<EntityRecord>;\n selected: string[]; // Selected record IDs\n };\n };\n selectedRecord?: EntityRecord;\n activeView?: EntityView;\n isLoading: boolean;\n error?: string;\n loadingStates: Record<string, boolean>;\n}\n\nexport interface EntityRecordSelector {\n entityRecord: EntityRecordState;\n}\n\nconst initialState: EntityRecordState = {\n records: {},\n isLoading: false,\n loadingStates: {},\n};\n\nconst entityRecordSlice = createSlice({\n name: \"entityRecord\",\n initialState,\n reducers: {\n setLoading: (state, action: PayloadAction<boolean>) => {\n state.isLoading = action.payload;\n },\n\n setOperationLoading: (\n state,\n action: PayloadAction<{ operation: string; loading: boolean }>\n ) => {\n state.loadingStates[action.payload.operation] = action.payload.loading;\n },\n\n setError: (state, action: PayloadAction<string | undefined>) => {\n state.error = action.payload;\n },\n\n setRecords: (\n state,\n action: PayloadAction<{\n entityName: string;\n records: ListResult<EntityRecord>;\n params: EntityQuery;\n }>\n ) => {\n const { entityName, records, params } = action.payload;\n state.records[entityName] = {\n items: records.items.reduce(\n (acc, record) => {\n acc[record.id] = record;\n return acc;\n },\n {} as Record<string, EntityRecord>\n ),\n params,\n meta: records,\n selected: [],\n };\n },\n\n addRecord: (\n state,\n action: PayloadAction<{ entityName: string; record: EntityRecord }>\n ) => {\n const { entityName, record } = action.payload;\n if (state.records[entityName]) {\n state.records[entityName].items[record.id] = record;\n }\n },\n\n updateRecord: (\n state,\n action: PayloadAction<{ entityName: string; record: EntityRecord }>\n ) => {\n const { entityName, record } = action.payload;\n if (state.records[entityName]) {\n state.records[entityName].items[record.id] = record;\n }\n },\n\n removeRecord: (\n state,\n action: PayloadAction<{ entityName: string; recordId: string }>\n ) => {\n const { entityName, recordId } = action.payload;\n if (state.records[entityName]) {\n delete state.records[entityName].items[recordId];\n state.records[entityName].selected = state.records[\n entityName\n ].selected.filter((id) => id !== recordId);\n }\n },\n\n setSelected: (\n state,\n action: PayloadAction<{ entityName: string; ids: string[] }>\n ) => {\n const { entityName, ids } = action.payload;\n if (state.records[entityName]) {\n state.records[entityName].selected = ids;\n }\n },\n\n setActiveView: (state, action: PayloadAction<EntityView | undefined>) => {\n state.activeView = action.payload;\n },\n\n updateQueryParams: (\n state,\n action: PayloadAction<{\n entityName: string;\n params: Partial<EntityQuery>;\n }>\n ) => {\n const { entityName, params } = action.payload;\n if (state.records[entityName]) {\n state.records[entityName].params = {\n ...state.records[entityName].params,\n ...params,\n };\n }\n },\n\n setSelectedRecord: (\n state,\n action: PayloadAction<{ record: EntityRecord }>\n ) => {\n const { record } = action.payload;\n state.selectedRecord = record;\n },\n },\n});\n\nexport const {\n setLoading,\n setOperationLoading,\n setError,\n setRecords,\n addRecord,\n updateRecord,\n removeRecord,\n setSelected,\n setSelectedRecord,\n setActiveView,\n updateQueryParams,\n} = entityRecordSlice.actions;\n\nexport const entityRecordReducer = entityRecordSlice.reducer;\n","\"use client\";\n\nimport { useCallback, useRef } from 'react';\n\nexport function useDebounce<T extends (...args: any[]) => any>(\n callback: T,\n delay: number\n): (...args: Parameters<T>) => void {\n const timerRef = useRef<NodeJS.Timeout | null>(null);\n\n return useCallback((...args: Parameters<T>) => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n\n timerRef.current = setTimeout(() => {\n callback(...args);\n }, delay);\n }, [callback, delay]);\n}\n\n","\"use client\";\n\nimport React, { createContext, useContext, useMemo } from \"react\";\nimport { useEntityRecord, UseEntityRecordType } from \"../hooks\";\n\nexport const EntityRecordContext = createContext<\n UseEntityRecordType | undefined\n>(undefined);\n\nexport interface EntityRecordProviderProps {\n children: React.ReactNode;\n orgId: string;\n entityName: string;\n options?: {\n autoLoad?: boolean;\n };\n}\n\nexport function EntityRecordProvider({\n children,\n orgId,\n entityName,\n options = {},\n}: EntityRecordProviderProps) {\n const hookValue = useEntityRecord(orgId, entityName, options);\n const value = useMemo(() => hookValue, [hookValue]);\n\n return (\n <EntityRecordContext.Provider value={value}>\n {children}\n </EntityRecordContext.Provider>\n );\n}\n\nexport function useEntityRecordContext() {\n const context = useContext(EntityRecordContext);\n\n if (!context) {\n throw new Error(\n \"useEntityRecordContext must be used within an EntityRecordProvider\"\n );\n }\n\n return context;\n}\n","// Predefined colors with their display names\nexport const PREDEFINED_COLORS = [\n { value: \"#EF4444\", name: \"Red\" },\n { value: \"#F97316\", name: \"Orange\" },\n { value: \"#EAB308\", name: \"Yellow\" },\n { value: \"#22C55E\", name: \"Green\" },\n { value: \"#06B6D4\", name: \"Cyan\" },\n { value: \"#3B82F6\", name: \"Blue\" },\n { value: \"#6366F1\", name: \"Indigo\" },\n { value: \"#A855F7\", name: \"Purple\" },\n];\n"],"mappings":"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","names":["entityName","useCallback","useEffect","useCallback","useEffect","useCallback","useEffect","useDispatch","useSelector","useNatsContext","createSlice","initialState","setLoading","setOperationLoading","setError","useNatsContext","useDispatch","useSelector","useCallback","setOperationLoading","setError","error","useEffect","useCallback","createContext","useContext","useMemo","jsx","createContext","useMemo","useContext"]}
|