{"version":3,"file":"formbird-services.mjs","sources":["../../../../projects/services/redux/store/app.store.ts","../../../../projects/services/redux/actions/form-new.actions.ts","../../../../projects/services/redux/actions/offline.actions.ts","../../../../projects/services/redux/state/form-new.state.ts","../../../../projects/services/redux/reducers/form-document.reducer.ts","../../../../projects/services/redux/state/user.state.ts","../../../../projects/services/redux/actions/user.actions.ts","../../../../projects/services/redux/reducers/user.reducer.ts","../../../../projects/services/redux/state/offline.state.ts","../../../../projects/services/redux/reducers/offline.reducer.ts","../../../../projects/services/redux/reducers/index.ts","../../../../projects/services/redux/store/store.ts","../../../../projects/services/redux/store/redux-store.service.ts","../../../../projects/services/redux/utils/assert.ts","../../../../projects/services/redux/selectors/selectors.ts","../../../../projects/services/redux/utils/get-in.ts","../../../../projects/services/redux/utils/set-in.ts","../../../../projects/services/redux/components/fractal-reducer-map.ts","../../../../projects/services/redux/components/selectors.ts","../../../../projects/services/redux/components/sub-store.ts","../../../../projects/services/redux/store/root.store.ts","../../../../projects/services/redux/decorators/helpers.ts","../../../../projects/services/redux/decorators/select.ts","../../../../projects/services/constants/LocalStorageKeys.ts","../../../../projects/services/utils/UrlBasePathUtil.ts","../../../../projects/services/services/storage/SynchronousStorageService.ts","../../../../projects/services/services/storage/local-storage/local-storage.service.ts","../../../../projects/services/services/page-visibility.service.ts","../../../../projects/services/services/worker/workers.service.ts","../../../../projects/services/services/key-value-storage/key-value-storage.service.ts","../../../../projects/services/constants/OfflineConstants.ts","../../../../projects/services/services/user/logged-in-user.service.ts","../../../../projects/services/services/access/client-access.service.ts","../../../../projects/services/services/broadcast/broadcast.service.ts","../../../../projects/services/services/config/config.service.ts","../../../../projects/services/services/document/template-html.service.ts","../../../../projects/services/services/notification/notification.service.ts","../../../../projects/services/constants/ClientConstants.ts","../../../../projects/services/services/session/session-test.service.ts","../../../../projects/services/services/offline-status/offline-status.service.ts","../../../../projects/services/services/indexeddb/indexed-dbconnector.service.ts","../../../../projects/services/utils/UtilService.ts","../../../../projects/services/services/document/document-session.service.ts","../../../../projects/services/services/indexeddb/dexie-search.service.ts","../../../../projects/services/services/indexeddb/dexie-worker.service.ts","../../../../projects/services/services/indexeddb/search-queue.ts","../../../../projects/services/services/opfs/opfs-cache.service.ts","../../../../projects/services/services/indexeddb/indexed-db.service.ts","../../../../projects/services/services/offline/offline-web-worker-message.type.ts","../../../../projects/services/services/data/rest-data.service.ts","../../../../projects/services/services/data/data.service.ts","../../../../projects/services/services/component/component.service.ts","../../../../projects/services/services/document/current-document-info.service.ts","../../../../projects/services/services/document/unsaved-document.service.ts","../../../../projects/services/services/document/document.service.ts","../../../../projects/services/services/document/current-document.service.ts","../../../../projects/services/services/document/modified-field.service.ts","../../../../projects/services/services/rules/client-rule-context.ts","../../../../projects/services/services/rules/include-document-data.service.ts","../../../../projects/services/services/rules/client-include-rule-set.service.ts","../../../../projects/services/services/vendor-library/vendor-library.service.ts","../../../../projects/services/services/lazyload/lazy-script-loader.service.ts","../../../../projects/services/services/search/search.service.ts","../../../../projects/services/services/rules/client-rule-set-context.ts","../../../../projects/services/services/search/search-client.service.ts","../../../../projects/services/services/preprocessor/custom-field/custom-field-preprocessor.service.ts","../../../../projects/services/services/preprocessor/pre-processor-field.service.ts","../../../../projects/services/services/rules/client-rules.service.ts","../../../../projects/services/services/document/latest-document.service.ts","../../../../projects/services/services/rules/proxy-engine.service.ts","../../../../projects/services/services/rules/rule-cache.service.ts","../../../../projects/services/services/rules/rule-engine.service.ts","../../../../projects/services/services/tab/tab.service.ts","../../../../projects/services/services/validation/validation.service.ts","../../../../projects/services/services/document/changed-document.service.ts","../../../../projects/services/services/document/client-system-header.service.ts","../../../../projects/services/services/document/current-child-document.service.ts","../../../../projects/services/services/document/document-update.service.ts","../../../../projects/services/services/document/finalise-value-field.service.ts","../../../../projects/services/utils/MandatoryValueProcessor.ts","../../../../projects/services/services/document/mandatory-field.service.ts","../../../../projects/services/services/pending-operations.service.ts","../../../../projects/services/services/document/document-save.service.ts","../../../../projects/services/services/document/template.service.ts","../../../../projects/services/services/event/storage-event.service.ts","../../../../projects/services/services/file/file-provider.service.ts","../../../../projects/services/services/indexeddb/indexed-dbproperties.service.ts","../../../../projects/services/services/layout/form-color.service.ts","../../../../projects/services/services/layout/modified-css.service.ts","../../../../projects/services/services/navigation/default-state.service.ts","../../../../projects/services/services/navigation/navigation.service.ts","../../../../projects/services/utils/UtilWebWorker.ts","../../../../projects/services/services/version/version.service.ts","../../../../projects/services/services/socket/web-socket.service.ts","../../../../projects/services/services/offline/offline-util.service.ts","../../../../projects/services/services/queries/search-queries.service.ts","../../../../projects/services/services/resource/client-resource.service.ts","../../../../projects/services/services/injector/formbird-injector.service.ts","../../../../projects/services/services/router/router.service.ts","../../../../projects/services/services/search/search-filter.service.ts","../../../../projects/services/services/storage/session-storage/session-storage.service.ts","../../../../projects/services/services/state/control-state-save.service.ts","../../../../projects/services/services/url/url.service.ts","../../../../projects/services/services/user/user-settings.service.ts","../../../../projects/services/formbird-services.module.ts","../../../../projects/services/constants/ControlStateConstants.ts","../../../../projects/services/services/preprocessor/related-document.preprocessor.ts","../../../../projects/services/services/tag/dynamic-meta-tag.service.ts","../../../../projects/services/services/modal.service.ts","../../../../projects/services/services/custom-element/custom-element.service.ts","../../../../projects/services/index.ts","../../../../projects/services/formbird-services.ts"],"sourcesContent":["import {\n  AnyAction,\n  Dispatch,\n  Middleware,\n  Reducer,\n  Store,\n  StoreEnhancer,\n  Unsubscribe,\n} from 'redux';\nimport { Observable } from 'rxjs';\nimport { ObservableStore } from './observable-store';\nimport { Comparator, PathSelector, Selector } from '../components/selectors';\n\n/**\n * This is the public interface of @formbird/services. It wraps the global\n * redux store and adds a few other add on methods. It's what you'll inject\n * into your Angular application as a service.\n */\nexport abstract class AppStore<RootState> implements ObservableStore<RootState> {\n  /** @hidden, @deprecated */\n  static instance?: ObservableStore<any> = undefined;\n\n  /**\n   * Accepts a Redux store, then sets it in AppStore and\n   * allows AppStore to observe and dispatch to it.\n   *\n   * This should only be called once for the lifetime of your app, for\n   * example in the constructor of your root component. If configureStore\n   * has been used this cannot be used.\n   *\n   * @param store Your app's store\n   */\n  abstract provideStore: (store: Store<RootState>) => void;\n\n  // Redux Store methods\n  abstract dispatch: Dispatch<AnyAction>;\n  abstract getState: () => RootState;\n  abstract subscribe: (listener: () => void) => Unsubscribe;\n  abstract replaceReducer: (nextReducer: Reducer<RootState, AnyAction>) => void;\n\n  // ObservableStore methods.\n  abstract select: <SelectedType>(\n    selector?: Selector<RootState, SelectedType>,\n    comparator?: Comparator,\n  ) => Observable<SelectedType>;\n  abstract configureSubStore: <SubState>(\n    basePath: PathSelector,\n    localReducer: Reducer<SubState, AnyAction>,\n  ) => ObservableStore<SubState>;\n}\n","import { ChangeSourceType, ComponentDefinition, DocumentChangedInfo, DocumentInfo, FormDocument } from '@formbird/types';\nimport { Action } from 'redux';\n\nexport const FORM_SETUP_DOCUMENT_LIST = 'FORM_SETUP_DOCUMENT_LIST';\n\nexport const FORM_CHANGE_DOCUMENT = 'FORM_CHANGE_DOCUMENT';\nexport const FORM_RESET_CHANGE_DOCUMENT = 'FORM_RESET_CHANGE_DOCUMENT';\nexport const FORM_SET_DOCUMENT = 'FORM_SET_DOCUMENT';\nexport const FORM_SET_TEMPLATE = 'FORM_SET_TEMPLATE';\nexport const FORM_DELETE_DOCUMENT = 'FORM_DELETE_DOCUMENT';\nexport const FORM_UPDATE_COMPONENT_DEFINITION = 'FORM_UPDATE_COMPONENT_DEFINITION';\nexport const FORM_RESET_TEMPLATE_COMPONENT_DEFINITION = 'FORM_RESET_TEMPLATE_COMPONENT_DEFINITION';\nexport const FORM_SET_COMPONENT_FLAG_TEMPLATE = 'FORM_SET_COMPONENT_FLAG_TEMPLATE';\nexport const FORM_SET_COMPONENT_PROPS_TEMPLATE = 'FORM_SET_COMPONENT_PROPS_TEMPLATE';\nexport const FORM_SET_LIST_COMPONENTS_FLAG_TEMPLATE = 'FORM_SET_LIST_COMPONENTS_FLAG_TEMPLATE';\nexport const FORM_CLEAR_DOCUMENT = 'FORM_CLEAR_DOCUMENT';\nexport const FORM_RESET_TO_ORG_DOCUMENT = 'FORM_RESET_TO_ORG_DOCUMENT';\nexport const FORM_DOCUMENT_LOADED = 'FORM_DOCUMENT_LOADED';\n\nexport const FORM_SET_ORG_DOCUMENT = 'FORM_SET_ORG_DOCUMENT';\n\nexport const FORM_SET_ALT_TEMPLATE_INFO = 'FORM_SET_ALT_TEMPLATE';\n\nexport const FORM_SET_DOCUMENT_INFO = 'FORM_SET_DOCUMENT_INFO';\nexport const FORM_RESET_DOCUMENT_INFO = 'FORM_RESET_DOCUMENT_INFO';\n\nexport const FORM_UPDATE_INIT_DOCUMENT_DATA = 'FORM_UPDATE_INIT_DOCUMENT_DATA';\nexport const FORM_RESET_INIT_DOCUMENT_DATA = 'FORM_RESET_INIT_DOCUMENT_DATA';\n\nexport const FORM_SET_DISABLE_SAVE_FIELD_DOCUMENT = 'FORM_SET_DISABLE_SAVE_FIELD_DOCUMENT';\nexport const FORM_SET_DOCUMENT_SESSION = 'FORM_SET_DOCUMENT_SESSION';\n\nexport const FORM_SET_RULES_STATUS = 'FORM_SET_RULES_STATUS';\n\n/**\n * Document List section\n */\nexport interface IFormSetupDocumentListAction extends Action {\n  payload: {\n    isNewMainDocList?: boolean,\n    documentListId?: string\n  };\n}\n\nexport function formSetupDocumentList(isNewMainDocList?: boolean, documentListId?: string): IFormSetupDocumentListAction {\n  return {\n    type: FORM_SETUP_DOCUMENT_LIST,\n    payload: {\n      isNewMainDocList,\n      documentListId\n    }\n  };\n}\n\n/**\n * Change document section\n */\nexport interface IFormDocumentChangedAction extends Action {\n  payload: {\n    documentChangedInfo: DocumentChangedInfo\n  };\n}\n\nexport function formDocumentChanged(documentChangedInfo: DocumentChangedInfo): IFormDocumentChangedAction {\n  return {\n    type: FORM_CHANGE_DOCUMENT,\n    payload: {\n      documentChangedInfo\n    }\n  };\n}\n\nexport interface IFormResetDocumentChangedAction extends Action {\n}\n\nexport function formResetDocumentChanged(): IFormResetDocumentChangedAction {\n  return {\n    type: FORM_RESET_CHANGE_DOCUMENT\n  };\n}\n\n/**\n * Clear document section\n */\nexport interface IFormClearDocumentsAction extends Action {\n}\n\nexport function formClearDocuments(): IFormClearDocumentsAction {\n  return {\n    type: FORM_CLEAR_DOCUMENT\n  };\n}\n\n/**\n * Set document section\n */\nexport interface IFormSetDocumentAction extends Action {\n  payload: {\n    document: FormDocument;\n    versionId?: string;\n    source?: ChangeSourceType;\n  };\n}\n\nexport interface IFormDeleteDocumentAction extends Action {\n  payload: {\n    documentId: string;\n  };\n}\n\nexport interface IFormUpdateComponentDefinitionAction extends Action {\n  payload: {\n    templateId: string;\n    fieldName: string;\n    key: number;\n    componentDef: ComponentDefinition;\n  };\n}\n\nexport interface IFormResetTemplateComponentDefinitionAction extends Action {\n  payload: {\n    templateId: string;\n  };\n}\n\nexport interface IFormSetComponentFlagAction extends Action {\n  payload: {\n    templateId: string;\n    fieldName: string;\n    flagName: string;\n    flagValue: any;\n    source?: ChangeSourceType\n  };\n}\n\nexport interface IFormSetComponentPropsAction extends Action {\n  payload: {\n    templateId: string;\n    fieldName: string;\n    componentName: string;\n    propertyValue: any;\n    source?: ChangeSourceType\n  };\n}\n\nexport interface IFormSetListComponentsFlagAction extends Action {\n  payload: {\n    templateId: string;\n    fieldNames: any;\n    flagName: string;\n    flagValue: any;\n    source?: ChangeSourceType\n  };\n}\n\nexport interface IFormResetToOrgDocumentAction extends Action {\n  payload: {\n    documentId: string\n  }\n}\n\nexport function formSetDocument(document: FormDocument, versionId?: string): IFormSetDocumentAction {\n  return {\n    type: FORM_SET_DOCUMENT,\n    payload: {\n      document,\n      versionId\n    }\n  };\n}\n\nexport function formSetTemplate(document: FormDocument, versionId?: string): IFormSetDocumentAction {\n  return {\n    type: FORM_SET_TEMPLATE,\n    payload: {\n      document,\n      versionId\n    }\n  };\n}\n\nexport function formUpdateComponentDefinition(templateId, fieldName, key, componentDef): IFormUpdateComponentDefinitionAction {\n  return {\n    type: FORM_UPDATE_COMPONENT_DEFINITION,\n    payload: {\n      templateId,\n      fieldName,\n      key,\n      componentDef\n    }\n  };\n}\n\nexport function formResetTemplateComponentDefinition(templateId, unsavedDocumentListId?: string):\n  IFormResetTemplateComponentDefinitionAction {\n  return {\n    type: FORM_RESET_TEMPLATE_COMPONENT_DEFINITION,\n    payload: {\n      templateId\n    }\n  };\n}\n\nexport function formSetComponentPropsTemplate(templateId, fieldName, componentName, propertyValue): IFormSetComponentPropsAction {\n  return {\n    type: FORM_SET_COMPONENT_PROPS_TEMPLATE,\n    payload: {\n      templateId,\n      fieldName,\n      componentName,\n      propertyValue\n    }\n  };\n}\n\nexport function formSetComponentFlagTemplate(templateId, fieldName, flagName, flagValue): IFormSetComponentFlagAction {\n  return {\n    type: FORM_SET_COMPONENT_FLAG_TEMPLATE,\n    payload: {\n      templateId,\n      fieldName,\n      flagName,\n      flagValue\n    }\n  };\n}\n\nexport function formSetListComponentsFlagTemplate(templateId, fieldNames, flagName, flagValue): IFormSetListComponentsFlagAction {\n  return {\n    type: FORM_SET_LIST_COMPONENTS_FLAG_TEMPLATE,\n    payload: {\n      templateId,\n      fieldNames,\n      flagName,\n      flagValue\n    }\n  };\n}\n\nexport function formSetOrgDocument(document: FormDocument, versionId?: string): IFormSetDocumentAction {\n  return {\n    type: FORM_SET_ORG_DOCUMENT,\n    payload: {\n      document,\n      versionId\n    }\n  };\n}\n\nexport function formDeleteDocument(documentId: string): IFormDeleteDocumentAction {\n  return {\n    type: FORM_DELETE_DOCUMENT,\n    payload: {\n      documentId\n    }\n  };\n}\n\nexport function formResetToOrgDocument(documentId: string, unsavedDocumentListId?: string): IFormResetToOrgDocumentAction {\n  return {\n    type: FORM_RESET_TO_ORG_DOCUMENT,\n    payload: {\n      documentId\n    }\n  };\n}\n\n/**\n * Document info section\n */\nexport interface IFormSetDocumentInfoAction extends Action {\n  payload: {\n    unsavedDocumentListId: string,\n    documentInfo: DocumentInfo\n  }\n}\n\nexport function formSetDocumentInfo(documentListId: string, documentInfo: DocumentInfo): IFormSetDocumentInfoAction {\n  return {\n    type: FORM_SET_DOCUMENT_INFO,\n    payload: {\n      documentInfo,\n      unsavedDocumentListId: documentListId\n    }\n  };\n}\n\nexport interface IFormResetDocumentInfoAction extends Action {\n  payload: {\n    unsavedDocumentListId: string\n  }\n}\n\nexport function formResetDocumentInfo(unsavedDocumentListId: string): IFormResetDocumentInfoAction {\n  return {\n    type: FORM_RESET_DOCUMENT_INFO,\n    payload: {\n      unsavedDocumentListId\n    }\n  };\n}\n\nexport interface IFormUpdateInitDocumentDataAction extends Action {\n  payload: {\n    unsavedDocumentListId: string,\n    documentId: string,\n    fieldName: string,\n    fieldValue: any\n  }\n}\n\nexport function formUpdateInitDocumentData(unsavedDocumentListId: string, documentId: string, fieldName: string, fieldValue: any): IFormUpdateInitDocumentDataAction {\n  return {\n    type: FORM_UPDATE_INIT_DOCUMENT_DATA,\n    payload: {\n      unsavedDocumentListId,\n      documentId,\n      fieldName,\n      fieldValue\n    }\n  };\n}\n\nexport interface IFormResetInitDocumentDataAction extends Action {\n  payload: {\n    unsavedDocumentListId: string,\n    documentId: string\n  }\n}\n\nexport function formResetInitDocumentData(unsavedDocumentListId: string, documentId: string): IFormResetInitDocumentDataAction {\n  return {\n    type: FORM_RESET_INIT_DOCUMENT_DATA,\n    payload: {\n      unsavedDocumentListId,\n      documentId\n    }\n  };\n}\n\nexport interface IFormDocumentLoadedAction extends Action {\n  payload: {\n    documentId: string,\n    unsavedDocumentListId: string,\n    isLoaded: boolean\n  }\n}\n\nexport function formDocumentLoaded(documentId: string, unsavedDocumentListId: string, isLoaded: boolean): IFormDocumentLoadedAction {\n  return {\n    type: FORM_DOCUMENT_LOADED,\n    payload: {\n      documentId,\n      unsavedDocumentListId,\n      isLoaded\n    }\n  };\n}\n\nexport interface IFormSetDisabledSaveAction extends Action {\n  payload: {\n    documentId: string;\n    disabledFields: any;\n  };\n}\n\nexport function formSetDisableSaveFieldDocument(documentId: string, disabledFields: any): IFormSetDisabledSaveAction {\n  return {\n    type: FORM_SET_DISABLE_SAVE_FIELD_DOCUMENT,\n    payload: {\n      documentId,\n      disabledFields\n    }\n  };\n}\n\n\nexport interface IFormSetDocumentSessionAction extends Action {\n  payload: {\n    documentSession: any;\n    documentId: string;\n  };\n}\n\nexport function formSetDocumentSession(documentSession: any, documentId: string): IFormSetDocumentSessionAction {\n  return {\n    type: FORM_SET_DOCUMENT_SESSION,\n    payload: {\n      documentSession,\n      documentId\n    }\n  };\n}\n\nexport interface IFormSetRulesStatusAction extends Action {\n  payload: {\n    templateId: string;\n    status: string;\n  };\n}\n\nexport function formSetRulesStatus(templateId: string, status: string): IFormSetRulesStatusAction {\n  return {\n    type: FORM_SET_RULES_STATUS,\n    payload: {\n      templateId,\n      status\n    }\n  };\n}\n\nexport interface IFormSetAltTemplateInfoAction extends Action {\n  payload: {\n    documentId: string,\n    templateId: string\n  }\n}\n\nexport function formSetAltTemplateInfo(documentId: string, templateId: string): IFormSetAltTemplateInfoAction {\n  return {\n    type: FORM_SET_ALT_TEMPLATE_INFO,\n    payload: {\n      documentId,\n      templateId\n    }\n  }\n}","import { Action } from 'redux';\nimport { OfflineStatus } from '@formbird/types';\n\nconst logger = console;\n\nexport const OFFLINE_SET_OFFLINE_STATUS = 'OFFLINE_SET_OFFLINE_STATUS';\n\n\nexport interface IOfflineSetOfflineStatusAction extends Action {\n  payload: {\n    offlineStatus: OfflineStatus;\n  };\n}\n\nexport function offlineSetOfflineStatus(offlineStatus: OfflineStatus): IOfflineSetOfflineStatusAction {\n  return {\n    type: OFFLINE_SET_OFFLINE_STATUS,\n    payload: {\n      offlineStatus\n    }\n  };\n}\n","import { DocumentChangedInfo, StateChangeInfo } from '@formbird/types';\n\nexport interface IFormNewState {\n  resetDocument: string,\n  documents: any, // list of documents on forms\n  templates: any, // list of templates on forms\n  orgDocuments: any, // cached documents - they will be used as original ones\n  documentInfo: any, // list of hierarchy documents\n  documentChangedInfo: DocumentChangedInfo,\n  recordedStateChanges: StateChangeInfo,\n  recordedComponentTemplateChanges: any,\n  recordedDisableSaveFieldValues: any,\n  documentSession: any;\n  rulesProcessingData: any;\n  altTemplateInfo: any;\n}\n\nexport function getDefaultFormNewState(): IFormNewState {\n  return {\n    resetDocument: null,\n    documents: {},\n    templates: {},\n    orgDocuments: {},\n    documentInfo: {},\n    documentChangedInfo: null,\n    recordedStateChanges: null,\n    recordedComponentTemplateChanges: {},\n    recordedDisableSaveFieldValues: {},\n    documentSession: {},\n    rulesProcessingData: {},\n    altTemplateInfo: {}\n  };\n}\n","import { IFormSetAltTemplateInfoAction, FORM_SET_ALT_TEMPLATE_INFO } from './../actions/form-new.actions';\nimport { ChangeSourceInfo, SharedConstants, StateChangeInfo } from '@formbird/types';\nimport { isEqual } from 'lodash';\nimport { cloneDeep } from 'es-toolkit';\nimport { Action } from 'redux';\nimport {\n  FORM_CHANGE_DOCUMENT,\n  FORM_CLEAR_DOCUMENT,\n  FORM_DELETE_DOCUMENT,\n  FORM_RESET_CHANGE_DOCUMENT,\n  FORM_RESET_DOCUMENT_INFO,\n  FORM_RESET_TO_ORG_DOCUMENT,\n  FORM_UPDATE_COMPONENT_DEFINITION,\n  FORM_SET_COMPONENT_FLAG_TEMPLATE,\n  FORM_SET_COMPONENT_PROPS_TEMPLATE,\n  FORM_SET_LIST_COMPONENTS_FLAG_TEMPLATE,\n  FORM_SET_DISABLE_SAVE_FIELD_DOCUMENT,\n  FORM_SET_DOCUMENT,\n  FORM_SET_TEMPLATE,\n  FORM_SET_DOCUMENT_INFO,\n  FORM_SET_ORG_DOCUMENT,\n  FORM_SETUP_DOCUMENT_LIST,\n  FORM_SET_DOCUMENT_SESSION,\n  IFormDeleteDocumentAction,\n  IFormDocumentChangedAction,\n  IFormResetDocumentInfoAction,\n  IFormResetToOrgDocumentAction,\n  IFormUpdateComponentDefinitionAction,\n  IFormSetComponentFlagAction,\n  IFormSetComponentPropsAction,\n  IFormSetDocumentAction,\n  IFormSetDocumentInfoAction,\n  IFormSetupDocumentListAction,\n  IFormSetDisabledSaveAction,\n  IFormSetDocumentSessionAction,\n  IFormSetListComponentsFlagAction,\n  FORM_UPDATE_INIT_DOCUMENT_DATA,\n  FORM_RESET_INIT_DOCUMENT_DATA,\n  IFormUpdateInitDocumentDataAction,\n  IFormResetInitDocumentDataAction,\n  FORM_RESET_TEMPLATE_COMPONENT_DEFINITION,\n  IFormResetTemplateComponentDefinitionAction,\n  FORM_DOCUMENT_LOADED,\n  IFormDocumentLoadedAction,\n  FORM_SET_RULES_STATUS,\n  IFormSetRulesStatusAction\n} from '../actions';\nimport { getDefaultFormNewState, IFormNewState } from '../state/form-new.state';\n\nexport function formDocumentReducer(state: IFormNewState = getDefaultFormNewState(), action: Action): IFormNewState {\n\n  // let shouldRecordPatches = false;\n  // set the changes to state from reducer so if any changes they should be subscribed instead of listening whole state.\n  const recordedPatches: StateChangeInfo = {\n    patches: null\n  };\n  const changedSourceInfo: ChangeSourceInfo = {};\n\n\n  switch (action.type) {\n\n    case FORM_SETUP_DOCUMENT_LIST: {\n      const typedAction = <IFormSetupDocumentListAction>action;\n      const documentListId = typedAction.payload.documentListId;\n      const isNewMainDocList = typedAction.payload.isNewMainDocList;\n\n      const documentInfo = { ...state.documentInfo };\n      if (isNewMainDocList) {\n\n        // Remove the old main document that was attached to navbar and other places\n        let oldMainDocumentListId;\n\n        const documentListIds = Object.keys(documentInfo);\n\n        for (let i = 0; i < documentListIds.length; i++) {\n\n          const documentListId = documentListIds[i];\n\n          const documentIds = Object.keys(documentInfo[documentListId]);\n\n          for (let j = 0; j < documentIds.length && !oldMainDocumentListId; j++) {\n\n            const documentId = documentIds[j];\n\n            if (documentInfo[documentListId][documentId].isMainDoc) {\n              oldMainDocumentListId = documentListId;\n            }\n          }\n        }\n\n        if (oldMainDocumentListId) {\n          delete documentInfo[oldMainDocumentListId];\n        }\n      }\n\n      if (!documentInfo[documentListId]) {\n        documentInfo[documentListId] = {};\n      }\n\n      return { ...state, documentInfo: documentInfo };\n    }\n\n    case FORM_SET_ORG_DOCUMENT: {\n      const typedAction = <IFormSetDocumentAction>action;\n      const document = typedAction.payload.document;\n\n      const orgDocuments = { ...state.orgDocuments };\n      orgDocuments[document.documentId] = cloneDeep(document);\n      return { ...state, orgDocuments: orgDocuments };\n    }\n\n    case FORM_SET_DOCUMENT: {\n      const typedAction = <IFormSetDocumentAction>action;\n      const document = typedAction.payload.document;\n\n      if (typedAction.payload.versionId || document) {\n        const key = typedAction.payload.versionId ? typedAction.payload.versionId : document.documentId;\n\n        const documents = { ...state.documents };\n        documents[key] = document;\n\n        changedSourceInfo.documentId = key;\n        changedSourceInfo.resetDocument = true;\n        recordedPatches.changedSourceInfo = changedSourceInfo;\n        state = { ...state, recordedStateChanges: recordedPatches };\n\n        return { ...state, documents: documents, recordedStateChanges: recordedPatches };\n      }\n\n      return state;\n    }\n\n    case FORM_SET_ALT_TEMPLATE_INFO: {\n\n      const typedAction = <IFormSetAltTemplateInfoAction>action;\n      const documentId = typedAction.payload.documentId;\n      const templateId = typedAction.payload.templateId;\n\n      const stateAltTemplateInfo = { ...state.altTemplateInfo };\n      stateAltTemplateInfo[documentId] = templateId;\n\n      return { ...state, altTemplateInfo: stateAltTemplateInfo };\n    }\n\n    case FORM_SET_TEMPLATE: {\n      const typedAction = <IFormSetDocumentAction>action;\n      const document = typedAction.payload.document;\n\n      if (typedAction.payload.versionId || document) {\n        const key = typedAction.payload.versionId ? typedAction.payload.versionId : document.documentId;\n\n        const templates = { ...state.templates };\n        templates[key] = document;\n\n        return { ...state, templates: templates };\n      }\n\n      return state;\n    }\n\n    case FORM_UPDATE_COMPONENT_DEFINITION: {\n      const typedAction = <IFormUpdateComponentDefinitionAction>action;\n      const templateId = typedAction.payload.templateId;\n      const fieldName = typedAction.payload.fieldName;\n      const key = typedAction.payload.key;\n      const compDef = typedAction.payload.componentDef;\n\n      const templates = { ...state.templates };\n      const components = templates[templateId].components;\n\n      const recordedComponentTemplateChanges = { ...state.recordedComponentTemplateChanges };\n\n      if (!recordedComponentTemplateChanges[templateId]) {\n        recordedComponentTemplateChanges[templateId] = {};\n      }\n\n      if (!recordedComponentTemplateChanges[templateId][fieldName]) {\n        recordedComponentTemplateChanges[templateId][fieldName] = {};\n      }\n\n      let hasChanged = false;\n      if (components[key] && components[key].name && components[key].name === fieldName) {\n        components[key] = compDef;\n\n        recordedComponentTemplateChanges[templateId][fieldName].key = key;\n        recordedComponentTemplateChanges[templateId][fieldName].componentDef = compDef;\n\n        hasChanged = true;\n      }\n\n      // shouldRecordPatches = true;\n\n      return hasChanged ? { ...state, templates: templates, recordedComponentTemplateChanges: recordedComponentTemplateChanges } : state;\n    }\n\n    case FORM_SET_COMPONENT_PROPS_TEMPLATE: {\n      const typedAction = <IFormSetComponentPropsAction>action;\n      const fieldName = typedAction.payload.fieldName;\n      const componentName = typedAction.payload.componentName;\n      const propertyValue = typedAction.payload.propertyValue;\n      const templateId = typedAction.payload.templateId;\n      const templates = { ...state.templates };\n\n      const recordedComponentTemplateChanges = { ...state.recordedComponentTemplateChanges };\n      recordedComponentTemplateChanges[templateId] = {};\n      recordedComponentTemplateChanges[templateId][fieldName] = {};\n\n      let hasChanged = false;\n      templates[templateId].components.forEach((tplItem, idx) => {\n        if (tplItem.name && tplItem.name === fieldName && (!componentName || tplItem.componentName === componentName)) {\n          const keys = Object.keys(propertyValue);\n          keys.forEach(key => {\n            tplItem[key] = propertyValue[key];\n          });\n          tplItem = { ...tplItem, ...propertyValue };\n          recordedComponentTemplateChanges[templateId][fieldName].componentDef = tplItem;\n          recordedComponentTemplateChanges[templateId][fieldName].key = idx;\n          recordedComponentTemplateChanges[templateId][fieldName].propertyChanges = propertyValue;\n          if (componentName) {\n            recordedComponentTemplateChanges[templateId][fieldName].componentName = componentName;\n          }\n          hasChanged = true;\n        }\n\n      });\n\n      return hasChanged ? { ...state, recordedComponentTemplateChanges: recordedComponentTemplateChanges, templates: templates } : state;\n    }\n\n    case FORM_SET_COMPONENT_FLAG_TEMPLATE: {\n      const typedAction = <IFormSetComponentFlagAction>action;\n      const flagName = typedAction.payload.flagName;\n      const flagValue = typedAction.payload.flagValue;\n      const fieldName = typedAction.payload.fieldName;\n      const templateId = typedAction.payload.templateId;\n      const templates = { ...state.templates };\n\n      const recordedComponentTemplateChanges = {};\n      recordedComponentTemplateChanges[templateId] = {};\n      recordedComponentTemplateChanges[templateId][fieldName] = {};\n\n      let hasChanged = false;\n      let isProcessed = false;\n      templates[templateId].components.forEach((tplItem, idx) => {\n        // Ticket 18883: Fix issue where sc-collapsible-panel could not stay open when controlled by showField flag.\n        // Normally, once a component with the matching field name is processed, further matches are skipped (isProcessed).\n        // Exception: If a matching component is an 'sc-collapsible-panel', allow updating it even if isProcessed is true.\n        // Reason: sc-collapsible-panel behaves differently and needs independent updates. See https://mantis.formbird.com/view.php?id=14215\n        const shouldProcess = tplItem.name && tplItem.name === fieldName && !(isProcessed && tplItem.componentName === 'sc-collapsible-panel');\n        if (shouldProcess) {\n          isProcessed = true;\n          if (!isEqual(tplItem[flagName], flagValue)) {\n            tplItem[flagName] = flagValue;\n            recordedComponentTemplateChanges[templateId][fieldName][flagName] = flagValue;\n            // shouldRecordPatches = true;\n            hasChanged = true;\n          }\n          recordedComponentTemplateChanges[templateId][fieldName].componentDef = tplItem;\n          recordedComponentTemplateChanges[templateId][fieldName].key = idx;\n        }\n\n      });\n\n      return hasChanged ? { ...state, recordedComponentTemplateChanges: recordedComponentTemplateChanges, templates: templates} : state;\n    }\n\n    case FORM_SET_LIST_COMPONENTS_FLAG_TEMPLATE: {\n      const typedAction = <IFormSetListComponentsFlagAction>action;\n      const fieldNames = typedAction.payload.fieldNames;\n      const flagName = typedAction.payload.flagName;\n      const flagValue = typedAction.payload.flagValue;\n      const templateId = typedAction.payload.templateId;\n\n      const templates = state.templates;\n      const template = templates[templateId];\n\n      const recordedComponentTemplateChanges = { ...state.recordedComponentTemplateChanges };\n      if (!recordedComponentTemplateChanges[templateId]) {\n        recordedComponentTemplateChanges[templateId] = {};\n      }\n\n      let hasChanged = false;\n      template.components.forEach((tplItem, idx) => {\n\n        const fieldName = tplItem.name;\n        if (fieldNames.indexOf(fieldName) !== -1) {\n\n          tplItem[flagName] = flagValue;\n\n          if (!recordedComponentTemplateChanges[templateId][fieldName]) {\n            recordedComponentTemplateChanges[templateId][fieldName] = {};\n          }\n\n          if (!isEqual(recordedComponentTemplateChanges[templateId][fieldName][flagName], flagValue)) {\n            recordedComponentTemplateChanges[templateId][fieldName][flagName] = flagValue;\n            hasChanged = true;\n          }\n          recordedComponentTemplateChanges[templateId][fieldName].componentDef = tplItem;\n          recordedComponentTemplateChanges[templateId][fieldName].key = idx;\n        }\n\n      });\n\n      return hasChanged ? { ...state, recordedComponentTemplateChanges: recordedComponentTemplateChanges } : state;\n    }\n\n    case FORM_RESET_TEMPLATE_COMPONENT_DEFINITION: {\n      const typedAction = <IFormResetTemplateComponentDefinitionAction>action;\n      const templateId = typedAction.payload.templateId;\n\n      const recordedComponentTemplateChanges = { ...state.recordedComponentTemplateChanges };\n      recordedComponentTemplateChanges[templateId] = {};\n\n      return { ...state, recordedComponentTemplateChanges: recordedComponentTemplateChanges };\n    }\n\n    case FORM_CLEAR_DOCUMENT: {\n      const documentIds = Object.keys(state.documents);\n      const documents = { ...state.documents };\n      const templates = { ...state.templates };\n\n      documentIds.forEach(docId => {\n        // remove document from store\n        delete documents[docId];\n\n        if (documents[docId].systemHeader.systemType === SharedConstants.SYSTEM_TYPE_TEMPLATE) {\n          // remove templates from store\n          delete templates[docId];\n        }\n      });\n\n      return { ...state, documents: documents, templates: templates };\n    }\n\n    case FORM_DELETE_DOCUMENT: {\n      const typedAction = <IFormDeleteDocumentAction>action;\n      const documentId = typedAction.payload.documentId;\n\n      const documents = { ...state.documents };\n      const templates = { ...state.templates };\n      const orgDocuments = { ...state.orgDocuments };\n      const document = state.orgDocuments[documentId];\n      delete documents[documentId];\n      delete templates[document?.systemHeader?.templateId];\n      delete orgDocuments[documentId];\n\n      return { ...state, documents: documents, templates: templates, orgDocuments: orgDocuments };\n    }\n\n    case FORM_RESET_TO_ORG_DOCUMENT: {\n      const typedAction = <IFormResetToOrgDocumentAction>action;\n      const documentId = typedAction.payload.documentId;\n      const document = state.orgDocuments[documentId];\n\n      const documents = { ...state.documents };\n      if (documents[documentId]) {\n        documents[documentId] = document;\n        state = { ...state, documents: documents };\n      }\n\n      if (document?.systemHeader?.systemType === SharedConstants.SYSTEM_TYPE_TEMPLATE) {\n        const templates = { ...state.templates };\n        templates[documentId] = document;\n        state = { ...state, templates: templates };\n      }\n\n      return state;\n    }\n\n    case FORM_SET_DOCUMENT_INFO: {\n\n      // DocumentInfo Item Data Structure\n      // state.documentInfo[documentListId] = {\n      // isMainDoc: isMainDoc;\n      // documentId = null;\n      // templateId = null;\n      // altTemplateId = null;\n      // parentDocumentId = null;\n      // childDocumentId = null;\n      // options = {};\n      // initDocData = {\n      //   processedFields: [], // processedFields: stores processed fields from components\n      //   completedFields: []  // stores the fields have been initialized. It will be set once the RESET action is dispatched.\n      //   // It will be used to compare to the processedFields in order to trigger Onload\n      // }\n      // };\n\n      const typedAction = <IFormSetDocumentInfoAction>action;\n\n      const documentInfo = typedAction.payload.documentInfo;\n      const unsavedDocListId = typedAction.payload.unsavedDocumentListId;\n      const documentId = documentInfo.documentId;\n\n      const documentInfor = { ...state.documentInfo };\n      const storeDocumentInfo = documentInfor[unsavedDocListId];\n\n      if (!storeDocumentInfo[documentId]) {\n        storeDocumentInfo[documentId] = {};\n      }\n\n      const documentInfoItem = storeDocumentInfo[documentId];\n\n      if (!documentInfoItem.options) {\n        documentInfoItem.options = {};\n      }\n      if (!documentInfoItem.hierarchyInfo) {\n        documentInfoItem.hierarchyInfo = {};\n      }\n\n      const keys = Object.keys(documentInfo);\n      keys.forEach(key => {\n\n        if (key === 'options') {\n\n          const optKeys = Object.keys(documentInfo.options);\n          optKeys.forEach(key2 => {\n            documentInfoItem.options[key2] = documentInfo.options[key2];\n          });\n\n        } else {\n          documentInfoItem[key] = documentInfo[key];\n        }\n      });\n\n      const parentDocumentId = documentInfoItem.hierarchyInfo.parentDocumentId;\n      if (parentDocumentId) {\n        const parentDocInfo = storeDocumentInfo[parentDocumentId];\n        parentDocInfo.hierarchyInfo.childDocumentId = documentId;\n      }\n\n      return { ...state, documentInfo: documentInfor };\n    }\n\n    case FORM_RESET_DOCUMENT_INFO: {\n      const typedAction = <IFormResetDocumentInfoAction>action;\n\n      const documentInfo = { ...state.documentInfo };\n      documentInfo[typedAction.payload.unsavedDocumentListId] = {};\n\n      return { ...state, documentInfo: documentInfo };\n    }\n\n    case FORM_UPDATE_INIT_DOCUMENT_DATA: {\n      const typedAction = <IFormUpdateInitDocumentDataAction>action;\n      const unsavedDocListId = typedAction.payload.unsavedDocumentListId;\n      const documentId = typedAction.payload.documentId;\n\n      if (unsavedDocListId) {\n\n        const fieldName = typedAction.payload.fieldName;\n        const fieldValue = typedAction.payload.fieldValue;\n\n        let hasChanged = false;\n\n        const documentInfo = { ...state.documentInfo };\n        const documentInfoItem = documentInfo[unsavedDocListId][documentId];\n        if (!documentInfoItem.initDocData) {\n          documentInfoItem.initDocData = {\n            processedFields: [],\n            completedFields: []\n          };\n          hasChanged = true;\n        }\n\n        const initDocData = documentInfoItem.initDocData;\n        if (!initDocData.processedFields.includes(fieldName)) {\n          initDocData.processedFields.push(fieldName);\n          hasChanged = true;\n        }\n\n        if (hasChanged) {\n          state = { ...state, documentInfo: documentInfo };\n        }\n\n        const documents = { ...state.documents };\n        const document = documents[documentInfoItem.documentId];\n        if (fieldValue == null) {\n          delete document[fieldName];\n        } else {\n          document[fieldName] = fieldValue;\n        }\n        state = { ...state, documents: documents };\n      }\n\n      return state;\n    }\n\n    case FORM_RESET_INIT_DOCUMENT_DATA: {\n      const typedAction = <IFormResetInitDocumentDataAction>action;\n      const unsavedDocListId = typedAction.payload.unsavedDocumentListId;\n      const documentId = typedAction.payload.documentId;\n\n      let hasChanged = false;\n      const documentInfo = { ...state.documentInfo };\n      const documentInfoItem = documentInfo[unsavedDocListId][documentId];\n      if (!documentInfoItem.initDocData) {\n        documentInfoItem.initDocData = {\n          processedFields: [],\n          completedFields: []\n        };\n        hasChanged = true;\n      }\n\n      const initDocData = documentInfoItem.initDocData;\n      if (initDocData.processedFields.length) {\n        initDocData.completedFields = [...initDocData.processedFields];\n        initDocData.processedFields = [];\n        hasChanged = true;\n      }\n\n      return hasChanged ? { ...state, documentInfo: documentInfo } : state;\n    }\n\n    case FORM_DOCUMENT_LOADED: {\n\n      const typedAction = <IFormDocumentLoadedAction>action;\n      const documentId = typedAction.payload.documentId;\n      const unsavedDocListId = typedAction.payload.unsavedDocumentListId;\n      const isDocumentLoaded = typedAction.payload.isLoaded;\n\n      const documentInfo = { ...state.documentInfo };\n      const docInfo = documentInfo[unsavedDocListId];\n      if (docInfo && docInfo[documentId]) {\n        if (!isDocumentLoaded) {\n          delete docInfo[documentId];\n        } else {\n          docInfo[documentId].loaded = isDocumentLoaded;\n        }\n      }\n\n      state = { ...state, documentInfo: documentInfo };\n\n      if (!isDocumentLoaded) {\n        const documents = { ...state.documents };\n        const orgDocuments = { ...state.orgDocuments };\n        // const document = documents[documentId];\n        delete documents[documentId];\n        // delete orgDocuments[documentId];\n\n        state = { ...state, documents: documents, orgDocuments: orgDocuments };\n\n      }\n\n      return state;\n    }\n\n    case FORM_CHANGE_DOCUMENT: {\n      const typedAction = <IFormDocumentChangedAction>action;\n      const changedInfo = typedAction.payload.documentChangedInfo;\n\n      const documentId = changedInfo.documentId;\n      const documents = { ...state.documents };\n      const document = documents[documentId] || {};\n      const fieldName = changedInfo.fieldName;\n\n      changedInfo.oldValue = changedInfo.oldValue !== undefined ? changedInfo.oldValue : document[fieldName];\n      if (!isEqual(document[fieldName], changedInfo.newValue)) {\n        if (document[fieldName] !== undefined && changedInfo.newValue === undefined) {\n          delete document[fieldName];\n        } else {\n          document[fieldName] = changedInfo.newValue;\n        }\n        state = { ...state, documents: documents };\n      }\n\n      let documentChangedInfo = { ...state.documentChangedInfo };\n      if (!changedInfo.isInitValue) {\n        documentChangedInfo = changedInfo;\n        state = { ...state, documentChangedInfo: documentChangedInfo };\n      }\n\n      changedSourceInfo.documentId = documentId;\n      changedSourceInfo.fieldName = fieldName;\n      changedSourceInfo.type = changedInfo.sourceType;\n      changedSourceInfo.controlName = changedInfo.controlName;\n      recordedPatches.changedSourceInfo = changedSourceInfo;\n      state = { ...state, recordedStateChanges: recordedPatches };\n\n      const recordedDisableSaveFieldValues = { ...state.recordedDisableSaveFieldValues };\n      const template = state.templates[document?.systemHeader?.templateId];\n      let hasDisableSave = false;\n      if (template && template.components) {\n        const tplItem = template.components.filter(item => {\n          return item.name && item.name === fieldName;\n        })[0];\n\n        if (tplItem?.disableSave === true) {\n          if (!recordedDisableSaveFieldValues[documentId]) {\n            recordedDisableSaveFieldValues[documentId] = {};\n          }\n          recordedDisableSaveFieldValues[documentId][fieldName] = document[fieldName];\n          hasDisableSave = true;\n        }\n      }\n      if (hasDisableSave) {\n        state = { ...state, recordedDisableSaveFieldValues: recordedDisableSaveFieldValues };\n      }\n\n\n      return state;\n    }\n\n    case FORM_RESET_CHANGE_DOCUMENT: {\n      return { ...state, documentChangedInfo: undefined };\n    }\n\n    case FORM_SET_DISABLE_SAVE_FIELD_DOCUMENT: {\n      const typedAction = <IFormSetDisabledSaveAction>action;\n      const documentId = typedAction.payload.documentId;\n      const value = typedAction.payload.disabledFields;\n\n      const recordedDisableSaveFieldValues = { ...state.recordedDisableSaveFieldValues };\n      if (Object.keys(value).length) {\n        recordedDisableSaveFieldValues[documentId] = value;\n      } else {\n        delete recordedDisableSaveFieldValues[documentId];\n      }\n\n      return { ...state, recordedDisableSaveFieldValues: recordedDisableSaveFieldValues };\n    }\n\n    case FORM_SET_DOCUMENT_SESSION: {\n      const typedAction = <IFormSetDocumentSessionAction>action;\n      const document = typedAction.payload.documentSession;\n      const key = typedAction.payload.documentId;\n\n      const documentSession = { ...state.documentSession };\n      documentSession[key] = document;\n\n      return { ...state, documentSession: documentSession };\n    }\n\n    case FORM_SET_RULES_STATUS: {\n\n\n      const typedAction = <IFormSetRulesStatusAction>action;\n      const templateId = typedAction.payload.templateId;\n      const status = typedAction.payload.status;\n\n      const rulesProcessingData = { ...state.rulesProcessingData };\n      if (!rulesProcessingData[templateId]) {\n        rulesProcessingData[templateId] = {};\n      }\n\n      rulesProcessingData[templateId].status = status;\n\n      return { ...state, rulesProcessingData: rulesProcessingData };\n    }\n\n    default: {\n      return state;\n    }\n  }\n\n}\n","import { User } from '@formbird/types';\n\nexport interface IUserState {\n  user?: User;\n}\n\nexport function getDefaultUserState(): IUserState {\n  return {\n    user: {\n      welcomeMsg: '',\n      account: null,\n      filteredAccount: null,\n      menu: null,\n      publicAccount: false,\n      accountPublicURL: null,\n      accountControlDocument: null,\n      accountGroupConfigDocument: null\n    }\n  };\n}\n","import { Action } from 'redux';\nimport { User } from '@formbird/types';\n\nconst logger = console;\n\nexport const USER_SET_USER = 'USER_SET_USER';\n\n\nexport interface IUserSetUserAction extends Action {\n  payload: {\n    user: User;\n  };\n}\n\nexport function userSetUser(user: User): IUserSetUserAction {\n  return {\n    type: USER_SET_USER,\n    payload: {\n      user\n    }\n  };\n}\n","import { Action } from 'redux';\nimport { getDefaultUserState, IUserState } from '../state/user.state';\nimport { USER_SET_USER, IUserSetUserAction } from '../actions/user.actions';\n\nexport function userReducer(state: IUserState = getDefaultUserState(), action: Action): IUserState {\n  switch (action.type) {\n    case USER_SET_USER: {\n      const typedAction = <IUserSetUserAction>action;\n      return { ...state, user: typedAction.payload.user };\n    }\n\n    default: {\n      return state;\n    }\n  }\n}\n","import { OfflineStatus } from '@formbird/types';\n\nexport interface IOfflineState {\n  offlineStatus?: OfflineStatus;\n}\n\nexport function getDefaultOfflineState(): IOfflineState {\n  return {\n    offlineStatus: {\n        unsyncedCount: 0,\n        connected: true,\n        connectionText: '',\n        incomingCacheCount: 0,\n        maxCacheCount: 0,\n        currentCacheCount: 0,\n        cacheLoading: false,\n        pendingDocumentCount: 0,\n        errorCacheCount: 0,\n        initialCachingComplete: false,\n        cachingApp: false,\n        currentStaticResourceCount: 0,\n        totalStaticResourceCount: 0,\n        tileServerCacheCount: 0,\n        tileServerMaxCacheCount: 0,\n        errorCacheAttachedFile: [],\n        errorOfflineChangesSyncDocs: [],\n        maxCacheAttachedFileCount: 0,\n        currentCacheAttachedFileCount: 0,\n        enabled: false,\n        operateOnline: true,\n        pendingUploadCount: 0\n    }\n  };\n}\n","import { Action } from 'redux';\nimport { getDefaultOfflineState, IOfflineState } from '../state/offline.state';\nimport { OFFLINE_SET_OFFLINE_STATUS, IOfflineSetOfflineStatusAction } from '../actions/offline.actions';\n\nexport function offlineReducer(state: IOfflineState = getDefaultOfflineState(), action: Action): IOfflineState {\n  switch (action.type) {\n    case OFFLINE_SET_OFFLINE_STATUS: {\n      const typedAction = <IOfflineSetOfflineStatusAction>action;\n      return { ...state, offlineStatus: typedAction.payload.offlineStatus };\n    }\n\n    default: {\n      return state;\n    }\n  }\n}\n","import { combineReducers } from 'redux';\nimport { formDocumentReducer } from './form-document.reducer';\nimport { userReducer } from './user.reducer';\nimport { offlineReducer } from './offline.reducer';\n\nconst rootReducer = combineReducers({\n  offlineReducer: offlineReducer,\n  formState: formDocumentReducer,\n  userState: userReducer\n});\n\nexport default rootReducer;\n","import { createStore, Store } from 'redux';\nimport rootReducer from '../reducers/index';\n\nexport function getStore(): Store {\n  const globalWindow = <any>window;\n\n  if (!globalWindow.formbirdStore) {\n    // Create a Redux store holding the state of your app.\n    // Store it on the window object so it is accessible from custom elements\n    globalWindow.formbirdStore = createStore(\n      rootReducer,\n        globalWindow.__REDUX_DEVTOOLS_EXTENSION__ ? globalWindow.__REDUX_DEVTOOLS_EXTENSION__() :\n        globalWindow.REDUX_DEVTOOLS_EXTENSION ? globalWindow.REDUX_DEVTOOLS_EXTENSION() : f => f\n    );\n\n  }\n\n  return globalWindow.formbirdStore;\n}\n","import { Injectable } from '@angular/core';\nimport { getStore } from './store';\n\n@Injectable()\nexport class ReduxStoreService {\n  getStore() {\n      return getStore();\n  }\n}\n","/** @hidden */\nexport const assert = (condition: boolean, message: string): void => {\n  if (!condition) {\n    throw new Error(message);\n  }\n};\n","import { Observable } from 'rxjs';\n\n/**\n * Custom equality checker that can be used with `.select` and `@select`.\n * ```ts\n * const customCompare: Comparator = (x: any, y: any) => {\n *  return x.id === y.id\n * }\n *\n * @select(selector, customCompare)\n * ```\n */\nexport type Comparator = (x: any, y: any) => boolean;\nexport type Transformer<RootState, V> = (\n  store$: Observable<RootState>,\n  scope: any,\n) => Observable<V>;\nexport type PropertySelector = string | number | symbol;\nexport type PathSelector = (string | number)[];\nexport type FunctionSelector<RootState, S> = (s: RootState) => S;\nexport type Selector<RootState, S> =\n  | PropertySelector\n  | PathSelector\n  | FunctionSelector<RootState, S>;\n\n/** @hidden */\nexport const sniffSelectorType = <RootState, S>(\n  selector?: Selector<RootState, S>,\n) =>\n  !selector\n    ? 'nil'\n    : Array.isArray(selector)\n    ? 'path'\n    : 'function' === typeof selector\n      ? 'function'\n      : 'property';\n\n/** @hidden */\nexport const resolver = <RootState, S>(selector?: Selector<RootState, S>) => ({\n  property: (state: any) =>\n    state ? state[selector as PropertySelector] : undefined,\n  path: (state: RootState) => getIn(state, selector as PathSelector),\n  function: selector as FunctionSelector<RootState, S>,\n  nil: (state: RootState) => state,\n});\n\n/** @hidden */\nexport const resolveToFunctionSelector = <RootState, S>(\n  selector?: Selector<RootState, S>,\n) => resolver(selector)[sniffSelectorType(selector)];\n\n/**\n * Gets a deeply-nested property value from an object, given a 'path'\n * of property names or array indices.\n *\n * @hidden\n */\nexport function getIn(\n  v: any | undefined,\n  pathElems: (string | number)[],\n): any | undefined {\n  if (!v) {\n    return v;\n  }\n\n  // If this is an ImmutableJS structure, use existing getIn function\n  if ('function' === typeof v.getIn) {\n    return v.getIn(pathElems);\n  }\n\n  const [firstElem, ...restElems] = pathElems;\n\n  if (undefined === v[firstElem]) {\n    return undefined;\n  }\n\n  if (restElems.length === 0) {\n    return v[firstElem];\n  }\n\n  return getIn(v[firstElem], restElems);\n}\n","/**\n * Gets a deeply-nested property value from an object, given a 'path'\n * of property names or array indices.\n *\n * @hidden\n */\nexport function getIn(\n  v: any | undefined,\n  pathElems: (string | number)[],\n): any | undefined {\n  if (!v) {\n    return v;\n  }\n\n  // If this is an ImmutableJS structure, use existing getIn function\n  if ('function' === typeof v.getIn) {\n    return v.getIn(pathElems);\n  }\n\n  const [firstElem, ...restElems] = pathElems;\n\n  if (undefined === v[firstElem]) {\n    return undefined;\n  }\n\n  if (restElems.length === 0) {\n    return v[firstElem];\n  }\n\n  return getIn(v[firstElem], restElems);\n}\n","/**\n * Sets a deeply-nested property value from an object, given a 'path'\n * of property names or array indices. Path elements are created if\n * not there already. Does not mutate the given object.\n *\n * @hidden\n */\nexport const setIn = (\n  obj: any,\n  [firstElem, ...restElems]: (string | number)[],\n  value: any,\n): object =>\n  'function' === typeof (obj[firstElem] || {}).setIn\n    ? {\n        ...obj,\n        [firstElem]: obj[firstElem].setIn(restElems, value),\n      }\n    : {\n        ...obj,\n        [firstElem]:\n          restElems.length === 0\n            ? value\n            : setIn(obj[firstElem] || {}, restElems, value),\n      };\n","import { AnyAction, Reducer } from 'redux';\nimport { getIn } from '../utils/get-in';\nimport { setIn } from '../utils/set-in';\nimport { PathSelector } from './selectors';\n\nlet reducerMap: { [id: string]: Reducer<any, AnyAction> } = {};\n\nconst composeReducers = (\n  ...reducers: Reducer<any, AnyAction>[]\n): Reducer<any, AnyAction> => (state: any, action: AnyAction) =>\n  reducers.reduce((subState, reducer) => reducer(subState, action), state);\n\n/**\n * @param rootReducer Call this on your root reducer to enable SubStore\n * functionality for pre-configured stores (e.g. using AppStore.provideStore()).\n * AppStore.configureStore\n * does it for you under the hood.\n */\nexport function enableFractalReducers(rootReducer: Reducer<any, AnyAction>) {\n  reducerMap = {};\n  return composeReducers(rootFractalReducer, rootReducer);\n}\n\n/** @hidden */\nexport function registerFractalReducer(\n  basePath: PathSelector,\n  localReducer: Reducer<any, AnyAction>,\n): void {\n  const existingFractalReducer = reducerMap[JSON.stringify(basePath)];\n  if (existingFractalReducer && existingFractalReducer !== localReducer) {\n    throw new Error(\n      `attempt to overwrite fractal reducer for basePath ${basePath}`,\n    );\n  }\n\n  reducerMap[JSON.stringify(basePath)] = localReducer;\n}\n\n/** @hidden */\nexport function replaceLocalReducer(\n  basePath: PathSelector,\n  nextLocalReducer: Reducer<any, AnyAction>,\n): void {\n  reducerMap[JSON.stringify(basePath)] = nextLocalReducer;\n}\n\nfunction rootFractalReducer(\n  state: {} = {},\n  action: AnyAction & { '@angular-redux::fractalkey'?: string },\n) {\n  const fractalKey = action['@angular-redux::fractalkey'];\n  const fractalPath = fractalKey ? JSON.parse(fractalKey) : [];\n  const localReducer = reducerMap[fractalKey || ''];\n  return fractalKey && localReducer\n    ? setIn(state, fractalPath, localReducer(getIn(state, fractalPath), action))\n    : state;\n}\n","import { Observable } from 'rxjs';\nimport { getIn } from '../utils/get-in';\n\n/**\n * Custom equality checker that can be used with `.select` and `@select`.\n * ```ts\n * const customCompare: Comparator = (x: any, y: any) => {\n *  return x.id === y.id\n * }\n *\n * @select(selector, customCompare)\n * ```\n */\nexport type Comparator = (x: any, y: any) => boolean;\nexport type Transformer<RootState, V> = (\n  store$: Observable<RootState>,\n  scope: any,\n) => Observable<V>;\nexport type PropertySelector = string | number | symbol;\nexport type PathSelector = (string | number)[];\nexport type FunctionSelector<RootState, S> = (s: RootState) => S;\nexport type Selector<RootState, S> =\n  | PropertySelector\n  | PathSelector\n  | FunctionSelector<RootState, S>;\n\n/** @hidden */\nexport const sniffSelectorType = <RootState, S>(\n  selector?: Selector<RootState, S>,\n) =>\n  !selector\n    ? 'nil'\n    : Array.isArray(selector)\n    ? 'path'\n    : 'function' === typeof selector\n    ? 'function'\n    : 'property';\n\n/** @hidden */\nexport const resolver = <RootState, S>(selector?: Selector<RootState, S>) => ({\n  property: (state: any) =>\n    state ? state[selector as PropertySelector] : undefined,\n  path: (state: RootState) => getIn(state, selector as PathSelector),\n  function: selector as FunctionSelector<RootState, S>,\n  nil: (state: RootState) => state,\n});\n\n/** @hidden */\nexport const resolveToFunctionSelector = <RootState, S>(\n  selector?: Selector<RootState, S>,\n) => resolver(selector)[sniffSelectorType(selector)];\n","import { AnyAction, Dispatch, Reducer } from 'redux';\nimport { Observable } from 'rxjs';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\n\nimport { getIn } from '../utils/get-in';\nimport {\n  registerFractalReducer,\n  replaceLocalReducer,\n} from './fractal-reducer-map';\nimport { AppStore } from '../store/app.store';\nimport { ObservableStore } from '../store/observable-store';\nimport {\n  Comparator,\n  PathSelector,\n  resolveToFunctionSelector,\n  Selector,\n} from './selectors';\n\n/** @hidden */\nexport class SubStore<State> implements ObservableStore<State> {\n  constructor(\n    private rootStore: AppStore<any>,\n    private basePath: PathSelector,\n    localReducer: Reducer<State, AnyAction>,\n  ) {\n    registerFractalReducer(basePath, localReducer);\n  }\n\n  dispatch: Dispatch<AnyAction> = action =>\n    this.rootStore.dispatch({\n      ...(action as any),\n      '@angular-redux::fractalkey': JSON.stringify(this.basePath),\n    });\n\n  getState = (): State => getIn(this.rootStore.getState(), this.basePath);\n\n  configureSubStore = <SubState>(\n    basePath: PathSelector,\n    localReducer: Reducer<SubState, AnyAction>,\n  ): ObservableStore<SubState> =>\n    new SubStore<SubState>(\n      this.rootStore,\n      [...this.basePath, ...basePath],\n      localReducer,\n    );\n\n  select = <SelectedState>(\n    selector?: Selector<State, SelectedState>,\n    comparator?: Comparator,\n  ): Observable<SelectedState> =>\n    this.rootStore.select<State>(this.basePath).pipe(\n      map(resolveToFunctionSelector(selector)),\n      distinctUntilChanged(comparator),\n    );\n\n  subscribe = (listener: () => void): (() => void) => {\n    const subscription = this.select().subscribe(listener);\n    return () => subscription.unsubscribe();\n  };\n\n  replaceReducer = (nextLocalReducer: Reducer<State, AnyAction>) =>\n    replaceLocalReducer(this.basePath, nextLocalReducer);\n}\n","import {\n  AnyAction,\n  applyMiddleware,\n  compose,\n  createStore,\n  Dispatch,\n  Middleware,\n  Reducer,\n  Store,\n  StoreCreator,\n  StoreEnhancer,\n  Unsubscribe,\n} from 'redux';\n\nimport { BehaviorSubject, Observable, Observer } from 'rxjs';\nimport { distinctUntilChanged, filter, map, switchMap } from 'rxjs/operators';\nimport { assert } from '../utils/assert';\nimport { enableFractalReducers } from '../components/fractal-reducer-map';\nimport { AppStore } from './app.store';\nimport { ObservableStore } from './observable-store';\nimport {\n  Comparator,\n  PathSelector,\n  resolveToFunctionSelector,\n  Selector,\n} from '../selectors/selectors';\nimport { SubStore } from '../components/sub-store';\n\n/** @hidden */\nexport class RootStore<RootState> extends AppStore<RootState> {\n  private store: Store<RootState> | undefined = undefined;\n  private store$: BehaviorSubject<RootState>;\n\n  constructor() {\n    super();\n\n    AppStore.instance = this;\n    this.store$ = new BehaviorSubject<RootState | undefined>(undefined).pipe(\n      filter(n => n !== undefined),\n      switchMap(observableStore => observableStore as any),\n      // TODO: fix this? needing to explicitly cast this is wrong\n    ) as BehaviorSubject<RootState>;\n  }\n\n  provideStore = (store: Store<RootState>) => {\n    assert(!this.store, 'Store already configured!');\n    this.setStore(store);\n  };\n\n  getState = (): RootState => this.store!.getState();\n\n  subscribe = (listener: () => void): Unsubscribe =>\n    this.store!.subscribe(listener);\n\n  replaceReducer = (nextReducer: Reducer<RootState, AnyAction>): void => {\n    this.store!.replaceReducer(nextReducer);\n  };\n\n  dispatch: Dispatch<AnyAction> = <A extends AnyAction>(action: A): A => {\n    assert(\n      !!this.store,\n      'Dispatch failed: did you forget to configure your store? '\n    );\n\n    return this.store!.dispatch(action);\n  };\n\n  select = <SelectedType>(\n    selector?: Selector<RootState, SelectedType>,\n    comparator?: Comparator,\n  ): Observable<SelectedType> =>\n    this.store$.pipe(\n      distinctUntilChanged(),\n      map(resolveToFunctionSelector(selector)),\n      distinctUntilChanged(comparator),\n    );\n\n  configureSubStore = <SubState>(\n    basePath: PathSelector,\n    localReducer: Reducer<SubState, AnyAction>,\n  ): ObservableStore<SubState> =>\n    new SubStore<SubState>(this, basePath, localReducer);\n\n  private setStore(store: Store<RootState>) {\n    this.store = store;\n    const storeServable = this.storeToObservable(store);\n    this.store$.next(storeServable as any);\n  }\n\n  private storeToObservable = (\n    store: Store<RootState>,\n  ): Observable<RootState> =>\n    new Observable<RootState>((observer: Observer<RootState>) => {\n      observer.next(store.getState());\n      const unsubscribeFromRedux = store.subscribe(() =>\n        observer.next(store.getState()),\n      );\n      return () => {\n        unsubscribeFromRedux();\n        observer.complete();\n      };\n    });\n}\n","import { AnyAction, Reducer } from 'redux';\nimport { distinctUntilChanged } from 'rxjs/operators';\nimport { AppStore } from '../store/app.store';\nimport { ObservableStore } from '../store/observable-store';\nimport {\n  Comparator,\n  PathSelector,\n  Selector,\n  Transformer,\n} from '../components/selectors';\n\n/**\n * Used with the `@WithSubStore` class decorator to define a SubStore (AKA a\n * fractal store).\n *\n * For more info on substores, see\n * https://github.com/angular-redux/platform/blob/master/packages/store/articles/fractal-store.md\n */\nexport interface FractalStoreOptions {\n  /**\n   * The name of an instance method that will define the\n   * base path for the subStore. This method is expected to return an array\n   * of property names or undefined/null.\n   */\n  basePathMethodName: string;\n\n  /**\n   * The localReducer for the substore in question.\n   */\n  localReducer: Reducer<any, AnyAction>;\n}\n\n/**\n * OPTIONS_KEY: this is per-class (static) and holds the config from the\n * @SubStore decorator.\n */\nconst OPTIONS_KEY = '@angular-redux::substore::class::options';\n\n/**\n * INSTANCE_SUBSTORE_KEY, INSTANCE_SELECTIONS_KEY: these are per-instance\n * (non-static) and holds references to the substores/selected observables\n * to be used by an instance of a decorated class. I'm not using\n * reflect-metadata here because I want\n *\n * 1. different instances to have different substores in the case where\n * `basePathMethodName` is dynamic.\n * 2. the instance substore to be garbage collected when the instance is no\n * longer reachable.\n * This is therefore an own-property on the actual instance of the decorated\n * class.\n */\nconst INSTANCE_SUBSTORE_KEY = '@angular-redux::substore::instance::store';\nconst INSTANCE_SELECTIONS_KEY =\n  '@angular-redux::substore::instance::selections';\n\n/**\n * Used to detect when the base path changes - this allows components to\n * dynamically adjust their selections if necessary.\n */\nconst INSTANCE_BASE_PATH_KEY = '@angular-redux::substore::instance::basepath';\n\nconst getClassOptions = (decoratedInstance: any): FractalStoreOptions =>\n  decoratedInstance.constructor[OPTIONS_KEY];\n\n/** @hidden */\nexport const setClassOptions = (\n  decoratedClassConstructor: any,\n  options: FractalStoreOptions,\n): void => {\n  decoratedClassConstructor[OPTIONS_KEY] = options;\n};\n\n// I want the store to be saved on the actual instance so\n// 1. different instances can have distinct substores if necessary\n// 2. the substore/selections will be marked for garbage collection when the\n//    instance is destroyed.\nconst setInstanceStore = (\n  decoratedInstance: any,\n  store?: ObservableStore<any>,\n) => (decoratedInstance[INSTANCE_SUBSTORE_KEY] = store);\n\nconst getInstanceStore = (decoratedInstance: any): ObservableStore<any> =>\n  decoratedInstance[INSTANCE_SUBSTORE_KEY];\n\nconst getInstanceSelectionMap = (decoratedInstance: any) => {\n  const map = decoratedInstance[INSTANCE_SELECTIONS_KEY] || {};\n  decoratedInstance[INSTANCE_SELECTIONS_KEY] = map;\n  return map;\n};\n\nconst hasBasePathChanged = (\n  decoratedInstance: any,\n  basePath?: PathSelector,\n): boolean =>\n  decoratedInstance[INSTANCE_BASE_PATH_KEY] !== (basePath || []).toString();\n\nconst setInstanceBasePath = (\n  decoratedInstance: any,\n  basePath?: PathSelector,\n): void => {\n  decoratedInstance[INSTANCE_BASE_PATH_KEY] = (basePath || []).toString();\n};\n\nconst clearInstanceState = (decoratedInstance: any) => {\n  decoratedInstance[INSTANCE_SELECTIONS_KEY] = null;\n  decoratedInstance[INSTANCE_SUBSTORE_KEY] = null;\n  decoratedInstance[INSTANCE_BASE_PATH_KEY] = null;\n};\n\n/**\n * Gets the store associated with a decorated instance (e.g. a\n * component or service)\n * @hidden\n */\nexport const getBaseStore = (\n  decoratedInstance: any,\n): ObservableStore<any> | undefined => {\n  // The root store hasn't been set up yet.\n  if (!AppStore.instance) {\n    return undefined;\n  }\n\n  const options = getClassOptions(decoratedInstance);\n\n  // This is not decorated with `@WithSubStore`. Return the root store.\n  if (!options) {\n    return AppStore.instance;\n  }\n\n  // Dynamic base path support:\n  const basePath = decoratedInstance[options.basePathMethodName]();\n  if (hasBasePathChanged(decoratedInstance, basePath)) {\n    clearInstanceState(decoratedInstance);\n    setInstanceBasePath(decoratedInstance, basePath);\n  }\n\n  if (!basePath) {\n    return AppStore.instance;\n  }\n\n  const store = getInstanceStore(decoratedInstance);\n  if (!store) {\n    setInstanceStore(\n      decoratedInstance,\n      AppStore.instance.configureSubStore(basePath, options.localReducer),\n    );\n  }\n\n  return getInstanceStore(decoratedInstance);\n};\n\n/**\n * Creates an Observable from the given selection parameters,\n * rooted at decoratedInstance's store, and caches it on the\n * instance for future use.\n * @hidden\n */\nexport const getInstanceSelection = <T>(\n  decoratedInstance: any,\n  key: string | symbol,\n  selector: Selector<any, T>,\n  transformer?: Transformer<any, T>,\n  comparator?: Comparator,\n) => {\n  const store = getBaseStore(decoratedInstance);\n\n  if (store) {\n    const selections = getInstanceSelectionMap(decoratedInstance);\n\n    selections[key] =\n      selections[key] ||\n      (!transformer\n        ? store.select(selector, comparator)\n        : store.select(selector).pipe(\n            obs$ => transformer(obs$, decoratedInstance),\n            distinctUntilChanged(comparator),\n          ));\n\n    return selections[key];\n  }\n\n  return undefined;\n};\n","import { Comparator, Selector, Transformer } from '../components/selectors';\nimport { getInstanceSelection } from './helpers';\n\n/**\n * Selects an observable from the store, and attaches it to the decorated\n * property.\n *\n * ```ts\n *  import { select } from '@formbird/services';\n *\n *  class SomeClass {\n *    @select(['foo','bar']) foo$: Observable<string>\n * }\n * ```\n *\n * @param selector\n * A selector function, property name string, or property name path\n * (array of strings/array indices) that locates the store data to be\n * selected\n *\n * @param comparator Function used to determine if this selector has changed.\n */\nexport function select<T>(\n  selector?: Selector<any, T>,\n  comparator?: Comparator,\n): PropertyDecorator {\n  return (target: any, key: string | symbol): void => {\n    const adjustedSelector = selector\n      ? selector\n      : String(key).lastIndexOf('$') === String(key).length - 1\n      ? String(key).substring(0, String(key).length - 1)\n      : key;\n    decorate(adjustedSelector, undefined, comparator)(target, key);\n  };\n}\n\n/**\n * Selects an observable using the given path selector, and runs it through the\n * given transformer function. A transformer function takes the store\n * observable as an input and returns a derived observable from it. That derived\n *  observable is run through distinctUntilChanges with the given optional\n * comparator and attached to the store property.\n *\n * Think of a Transformer as a FunctionSelector that operates on observables\n * instead of values.\n *\n * ```ts\n * import { select$ } from 'angular-redux/store';\n *\n * export const debounceAndTriple = obs$ => obs$\n *  .debounce(300)\n *  .map(x => 3 * x);\n *\n * class Foo {\n *  @select$(['foo', 'bar'], debounceAndTriple)\n *  readonly debouncedFooBar$: Observable<number>;\n * }\n * ```\n */\nexport function select$<T>(\n  selector: Selector<any, T>,\n  transformer: Transformer<any, T>,\n  comparator?: Comparator,\n): PropertyDecorator {\n  return decorate(selector, transformer, comparator);\n}\n\nfunction decorate(\n  selector: Selector<any, any>,\n  transformer?: Transformer<any, any>,\n  comparator?: Comparator,\n): PropertyDecorator {\n  return function decorator(target: any, key): void {\n    function getter(this: any) {\n      return getInstanceSelection(this, key, selector, transformer, comparator);\n    }\n\n    // Replace decorated property with a getter that returns the observable.\n    if (delete target[key]) {\n      Object.defineProperty(target, key, {\n        get: getter,\n        enumerable: true,\n        configurable: true,\n      });\n    }\n  };\n}\n","/**\n * constants for local storage keys\n */\nexport const LocalStorageKeys = {\n  LOGGED_IN_USER_ID: 'LoggedInUserID', // Also used as offline database table name\n  LOGGED_IN_USER: 'LoggedInUser',\n  LOGGED_IN_ACCOUNT_CONTROL_DOCUMENT: 'LoggedInAccountControlDocument',\n  USER_SETTINGS: 'UserSettings',\n  COMMAND_BAR_CSS: 'commandBarCSS',\n  APP_VERSION: 'AppVersion',\n  CHECK_PUBLIC_USER: \"CheckPublicUser\",\n  TITLE_PREFIX: \"titlePrefix\",\n  SERVICE_WORKER_ACTIVATED: \"service-worker-activated\",\n  TOP_BAR_INITIALIZED: \"top-bar-initialized\"\n};\n","let basePath = '';\n\nconst baseTag = document.getElementsByTagName('base')[0];\nif (baseTag) {\n    basePath = baseTag.href.split('/')[3] || '';\n}\n\nexport const UrlBasePathUtil = {\n    basePath: basePath,\n    basePathWithSlashPrefix: basePath !== '' ? '/' + basePath : ''\n};\n\nexport class UrlBasePathService {\n    getBasePath() {\n        return UrlBasePathUtil.basePath;\n    }\n}\n","import { UrlBasePathService } from '../../utils/UrlBasePathUtil';\n\nexport abstract class SynchronousStorageService {\n  protected storage!: Storage;\n  protected urlBasePathService: UrlBasePathService;\n\n  protected constructor() {\n    this.urlBasePathService = new UrlBasePathService();\n  }\n\n  setItem(key: string, value: string) {\n    key = this.urlBasePathService.getBasePath() + key;\n    return this.storage.setItem(key, value);\n  }\n\n  getItem(key: string) {\n    key = this.urlBasePathService.getBasePath() + key;\n    return this.storage.getItem(key);\n  }\n\n  removeItem(key: string) {\n    key = this.urlBasePathService.getBasePath() + key;\n    return this.storage.removeItem(key);\n  }\n}\n","import { SynchronousStorageService } from '../SynchronousStorageService';\n\nexport class LocalStorageService extends SynchronousStorageService {\n  protected storage: Storage = localStorage;\n\n  constructor() {\n    super()\n  }\n}\n","import { Injectable } from '@angular/core';\n\nconst logger = console;\nlet pageVisibilityService$: any;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class PageVisibilityService {\n\n  // main snippet source: https://www.html5rocks.com/en/tutorials/pagevisibility/intro/\n  private visibilityListeners = [];\n\n  private evtname = null;\n\n  constructor() {\n    pageVisibilityService$ = this;\n  }\n\n  isHidden() {\n    if (!document.hidden) {\n      return false;\n    }\n\n    return document.hidden;\n  }\n\n  private visChange() {\n    const hidden = pageVisibilityService$.isHidden();\n\n    for (let x = 0; x < pageVisibilityService$.visibilityListeners.length; x++) {\n      pageVisibilityService$.visibilityListeners[x](hidden);\n    }\n\n  }\n\n  startListeningForPageVisibility() {\n    if (this.evtname !== null) { // done init, skip.\n      return;\n    }\n\n    if (document.hidden !== null) {\n      this.evtname = 'visibilitychange';\n      document.addEventListener(this.evtname, this.visChange);\n    } else {\n      logger.error('Visibility API not supported by browser.');\n    }\n\n  }\n\n  stopListeningForPageVisibility() {\n    document.removeEventListener(this.evtname, this.visChange);\n    this.evtname = null; // reset so we can enable it back via startListening..\n  }\n\n  /**\n   * Listeners should execute as fast as possible.\n   *\n   * It is the responsibility of the listener to implement its own debounce logic so to avoid unnecessary repetitive\n   * execution.\n   *\n   * At the moment, debounce will not be implemented here to allow the listeners to react in the shortest\n   * possible time.\n   * @param listener the listener\n   */\n\n  registerVisibilityListener(listener: (isHidden) => void) {\n    this.visibilityListeners.push(listener);\n  }\n\n  removeVisibilityListener(listener) {\n    this.visibilityListeners = this.visibilityListeners.filter(l => l !== listener);\n  }\n\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class WorkerService {\n    private workers: Map<string, { worker: Worker; isTerminated: boolean }> = new Map();\n\n    addWorker(key: string, worker: Worker): void {\n        if (this.workers.has(key)) {\n            this.terminateWorker(key);\n        }\n        this.workers.set(key, { worker, isTerminated: false });\n    }\n\n    getWorker(key: string): Worker | undefined {\n        const entry = this.workers.get(key);\n        return entry?.isTerminated ? undefined : entry?.worker;\n    }\n\n    isWorkerTerminated(key: string): boolean {\n        const entry = this.workers.get(key);\n        return entry ? entry.isTerminated : true;\n    }\n\n    terminateWorker(key: string): void {\n        const entry = this.workers.get(key);\n        if (entry && !entry.isTerminated) {\n            entry.worker.terminate();\n            entry.isTerminated = true;\n        }\n    }\n\n    terminateAllWorkers(): void {\n        this.workers.forEach((entry, key) => {\n            if (!entry.isTerminated) {\n                entry.worker.terminate();\n                entry.isTerminated = true;\n            }\n        });\n    }\n}\n","import { UrlBasePathService } from '../../utils/UrlBasePathUtil';\nimport { IndexedDBKeyValueStorage } from '@formbird/indexed-db';\n\nconst logger = console;\n\nexport class KeyValueStorageService extends IndexedDBKeyValueStorage{\n  private urlBasePathService: UrlBasePathService;\n\n  constructor() {\n    super();\n    this.urlBasePathService = new UrlBasePathService();\n  }\n\n  public setItem(key, value) {\n    key = this.urlBasePathService.getBasePath() + key;\n    const self = this;\n  \n\n    return new Promise<any>((resolve, reject) => {\n\n      super.setItem(key, value).then(result => {\n        resolve(result);\n      }, e => {\n        if (e.name === 'OpenFailedError') {\n          logger.error('Error getting dexie entries, open failed error.');\n          resolve(value);\n        } else {\n          reject(e);\n        }\n      });\n    });\n  }\n\n  public getItem(key) {\n    key = this.urlBasePathService.getBasePath() + key;\n    const self = this; \n\n    return new Promise<any>((resolve, reject) => {\n      super.getItem(key).then(result => {\n        resolve(result);\n      }, error => {\n         if (error.name === 'OpenFailedError') {\n            logger.error('Error getting dexie entries, open failed error.');\n            resolve(null);\n          } else {\n            logger.error('Error getting dexie entries: ' + error.message);\n            reject(error);\n          }\n      });     \n    });\n  }\n\n\n  public removeItem(key) {\n    key = this.urlBasePathService.getBasePath() + key;\n    const self = this;\n  \n    return new Promise<any>((resolve, reject) => {\n      super.removeItem(key).then(deleteCount =>{\n        resolve(deleteCount);\n      }, error => {\n        if (error.name === 'OpenFailedError') {\n          resolve(1);\n        } else {\n          logger.error('Error removing dexie entries: ' + error.message);\n          reject(error);\n        }\n      });\n    });\n  }\n\n\n\n}\n","'use strict';\n\n/**\n * A constants object for constants that are used on the client-side offline for service worker\n */\nexport const OfflineConstants = {\n\n  LOGGED_IN_USER_GROUP_CONFIG: 'LoggedInUserGroupConfig',\n  DEFAULT_MAX_UPLOAD_SIZE: 50, //size in megabytes\n  DOCUMENT_FIELD_NAME_UPLOAD_FILE: 'imageFileNo96',\n  OFFLINE_PENDING_DOCUMENT_COUNT: 'offlinePendingDocumentsCount'\n};\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { User } from '@formbird/types';\nimport { SharedUrlRoutes, UtilHttpStatus } from '@formbird/shared';\nimport { select} from '../../redux/decorators/select';\nimport { LocalStorageKeys } from '../../constants/LocalStorageKeys';\nimport { LocalStorageService } from '../storage/local-storage/local-storage.service';\nimport { PageVisibilityService } from '../page-visibility.service';\nimport { Observable } from 'rxjs';\nimport { IApplicationState } from '../../redux/state/application.state';\nimport { WorkerService } from '../worker/workers.service';\nimport { userSetUser } from '../../redux/actions/user.actions';\nimport { KeyValueStorageService  } from '../key-value-storage/key-value-storage.service';\nimport { OfflineConstants } from '../../constants/OfflineConstants';\nimport { cloneDeep } from 'es-toolkit';\nimport { AppStore } from '../../redux/store/app.store';\n\nconst serverRoutes = SharedUrlRoutes.serverRoutes;\nconst logger = console;\nlet LoggedInUserService$: any;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LoggedInUserService {\n  private http = inject(HttpClient);\n  private localStorageService = inject(LocalStorageService);\n  private pageVisibilityService = inject(PageVisibilityService);\n  private appStore = inject<AppStore<IApplicationState>>(AppStore);\n  private keyValueStorageService = inject(KeyValueStorageService);\n  private workerService = inject(WorkerService);\n  private userConfig: any = {};\n\n  @select(['userState', 'user']) user$: Observable<User>;\n\n  private user: User = {\n    welcomeMsg: '',\n    account: null,\n    filteredAccount: null,\n    menu: null,\n    publicAccount: false,\n    accountPublicURL: null,\n    accountControlDocument: null,\n    accountGroupConfigDocument: null\n  };\n\n  private userConfigItemListeners = []; // listeners for 'set' events in the user config.\n\n  constructor() {\n    LoggedInUserService$ = this;\n    this.pageVisibilityService.registerVisibilityListener((isPageHidden) => {\n      if (isPageHidden) {\n        return;\n      }\n\n      const trueUserId = this.localStorageService.getItem(LocalStorageKeys.LOGGED_IN_USER_ID);\n      const registeredUserId = this.user.account == null ? null : this.user.account.documentId;\n\n      if (trueUserId !== registeredUserId) { // user changed\n        window.location.reload(); // just reload the page so that everything is checked from its initial state.\n      }\n\n    });\n\n    this.user$.subscribe((user: User) => this.user = user);\n    this.getUserConfig();\n  }\n\n  /**\n   * get the id of the logged in user\n   */\n  getUserId() {\n    return this.user.account != null ? this.user.account.documentId : this.localStorageService.getItem(LocalStorageKeys.LOGGED_IN_USER_ID);\n  }\n\n  /**\n   * set the user on login\n   * @param account - the account to set\n   * @param setAsOfflineUser - whether to set this user as the offline user\n   */\n  setUser(account): Promise<void> {\n    return new Promise(async (resolve, reject) => {\n      if (account) {\n        this.user.filteredAccount = this.filterAcct(cloneDeep(account));\n        this.user.account = account;\n        this.user.menu = account.menu;\n\n        if (account.systemHeader) {\n          this.user.welcomeMsg = account.systemHeader.summaryName;\n        }\n\n        this.localStorageService.setItem(LocalStorageKeys.LOGGED_IN_USER_ID, account.documentId);\n        await this.keyValueStorageService.setItem(LocalStorageKeys.LOGGED_IN_USER_ID, account.documentId);\n        try{\n          const accountGroupConfigDocument = await this.loggedUserAccountGroupConfigDocument();\n          this.setUserAccountGroupConfigDocument(accountGroupConfigDocument);\n        }catch(err){\n          logger.error(\"Error on getting accountGroupConfig document \" + err.message);\n        }\n        this.loggedUserAccountControlDocument().subscribe(resp => {\n          this.setUserControlDocument(resp);\n\n          resolve();\n        });\n\n      } else {\n        resolve();\n      }\n    });\n  }\n\n  setUserControlDocument(controlDocument) {\n    if (controlDocument) {\n      this.user.accountControlDocument = controlDocument;\n\n      if (controlDocument.publicAccount) {\n        this.user.publicAccount = controlDocument.publicAccount;\n        this.user.accountPublicURL = controlDocument.accountPublicURL;\n      }\n    }\n\n    this.appStore.dispatch(userSetUser(this.user));\n  }\n\n  getUserControlDocument() {\n    return this.user.accountControlDocument;\n  }\n\n  loggedUserAccountControlDocument() {\n    const url = serverRoutes.loggedUserAccountControlDocument;\n    return this.http.get(url);\n  }\n\n  setUserAccountGroupConfigDocument(groupConfigDocument) {\n    if (groupConfigDocument) {\n      this.user.accountGroupConfigDocument = groupConfigDocument;\n    }\n\n    this.appStore.dispatch(userSetUser(this.user));\n  }\n\n  loggedUserAccountGroupConfigDocument() {\n    const url = serverRoutes.loggedUserAccountGroupConfigDocument;\n    return this.http.get(url);\n  }\n\n  getUserAccountGroupConfigDocument() {\n    return this.user.accountGroupConfigDocument;\n  }\n\n  /**\n   * remove the user on logout\n   * @param account the account\n   */\n  logoutUser() {\n    this.resetUser();\n    localStorage.removeItem(LocalStorageKeys.LOGGED_IN_USER_ID);\n    this.userConfigItemListeners = [];\n    this.workerService.terminateAllWorkers();\n\n    navigator?.serviceWorker?.ready?.then((registration) => {\n      if (registration.active) {\n        registration.active.postMessage({ type: 'LOGOUT_CLEAR' });\n        registration.active.postMessage({ type: 'OPERATE_ONLINE', operateOnline: true });         \n      }\n    });\n  }\n\n  private filterAcct(account) {\n\n    const fieldsToRemove = [\n      'accessKeys',\n      'attachKeys',\n      'components',\n      'menu',\n      'provider'\n    ];\n\n    for (let i = 0; i < fieldsToRemove.length; i++) {\n      delete account[fieldsToRemove[i]];\n    }\n\n    return account;\n  }\n\n  resetUser() {\n    // reset only values. See http://stackoverflow.com/questions/19744462/update-scope-value-when-service-data-is-changed\n    this.user.welcomeMsg = '';\n    this.user.account = null;\n    this.user.filteredAccount = null;\n    this.user.menu = null;\n\n  }\n\n  /**\n   * Custom user configuration is saved in local storage so that they survive across logins.\n   * To that end, they should only contain flags or basic values keeping in mind the\n   * limited storage capacity of local storage.\n   */\n  async getUserConfig() {\n    const userId = this.getUserId();\n\n    if (userId == null) {\n      logger.error('Requesting for user config with no user logged in.');\n      return null;\n    }\n\n    try {\n      this.userConfig = await this.keyValueStorageService.getItem(userId);\n\n      if (this.userConfig == null) {\n        // Add default user config here\n        this.userConfig = {\n          cachingEnabled: false,\n          idbCurrentVersion: 0,\n          searchIndexes: [],\n          registeredSearchIndexes: [],\n          lastSyncDate: 0\n        };\n\n        await this.keyValueStorageService.setItem(userId, this.userConfig);\n      }\n\n      return this.userConfig;\n\n    } catch (error) {\n      logger.error('Error getting user config: ', error);\n      return this.userConfig;\n    }\n  }\n\n  public getUserConfigItem(key) {\n    if (key == null) {\n      logger.error('Missing key on requesting user config.');\n      return;\n    }\n\n    this.getUserConfig();\n\n    if (this.userConfig == null) {\n      return;\n    }\n\n    return this.userConfig[key];\n  }\n\n  setUserConfigItem(key, value) {\n\n    if (key == null) {\n      logger.error('Missing key on setting user config.');\n      return;\n    }\n\n    this.getUserConfig();\n\n    this.userConfig[key] = value;\n\n    this.keyValueStorageService.setItem(this.getUserId(), this.userConfig);\n    for (let x = 0; x < this.userConfigItemListeners.length; x++) {\n      const listener = this.userConfigItemListeners[x];\n      if (listener.key === key) {\n        listener.listener(value); // informs the listener of the new value\n      }\n    }\n\n  }\n\n  /**\n   * Custom implementation for listening to changes in user config items. Originally this should\n   * have been done via using StorageEventListener but unfortunately it fires events only if other\n   * tabs had modified the offline storage.\n   * @param key the key\n   * @param listener the listener\n   */\n  addUserConfigItemListener(key, listener) {\n    if (key == null || listener == null) {\n      return;\n    }\n\n    this.userConfigItemListeners.push({ key: key, listener: listener });\n  }\n\n  isUserOfflineMode() {\n    return this.getUserConfigItem('cachingEnabled') === true;\n  }\n\n  getLoggedInUser() {\n    return this.user.account;\n  }\n\n  loadLoggedUser() {\n\n    const _self = this;\n\n    let operateOnline = this.getUserConfigItem('operateOnline');\n\n    const url = serverRoutes.loggedUserData;\n\n    return new Promise((resolve, reject) => {\n      if (operateOnline === false ) {\n        _self.appStore.dispatch(userSetUser(_self.user));\n        resolve({ user: _self.user.account });\n      } else {\n      _self.http.get<any>(url).subscribe(\n        response => {\n          const userBean = response;\n          _self.setUserControlDocument(response.controlDoc);\n          _self.setUserAccountGroupConfigDocument(response.groupConfigDoc);\n          _self.appStore.dispatch(userSetUser(_self.user));\n\n          return resolve(userBean);\n        },\n\n        error => {\n\n          if (_self.isUserOfflineMode() && error.status === UtilHttpStatus.SERVER_UNRESPONSIVE) { // account will be retrieved\n            resolve({ user: _self.user.account });\n\n          } else {\n            reject(error);\n          }\n        });\n      }\n\n    });\n  }\n\n  setLoggedUser() {\n\n    const _self = this;\n    let operateOnline = this.getUserConfigItem('operateOnline');\n    const url = serverRoutes.loggedUserData;\n\n    return new Promise((resolve, reject) => {\n      if (operateOnline === false ) {\n        _self.appStore.dispatch(userSetUser(_self.user));\n         resolve({ user: _self.user.account });\n      } else {\n      _self.http.get(url).subscribe(\n        async (response: any) => {\n          const userBean = response;\n          const account = userBean.user;\n\n          _self.user.filteredAccount = _self.filterAcct(cloneDeep(account));\n          _self.user.account = account;\n          _self.user.menu = account.menu;\n\n          if (account.systemHeader) {\n            _self.user.welcomeMsg = account.systemHeader.summaryName;\n          }\n\n          _self.localStorageService.setItem(LocalStorageKeys.LOGGED_IN_USER_ID, account.documentId);\n          await this.keyValueStorageService.setItem(LocalStorageKeys.LOGGED_IN_USER_ID, account.documentId);\n          _self.setUserControlDocument(userBean.controlDoc);\n          _self.setUserAccountGroupConfigDocument(userBean.groupConfigDoc);\n\n          await this.keyValueStorageService.setItem(OfflineConstants.LOGGED_IN_USER_GROUP_CONFIG, userBean.groupConfigDoc);\n          await this.getUserConfig();\n          resolve(userBean);\n        },\n        error => {\n\n          if (_self.isUserOfflineMode() && error.status === UtilHttpStatus.SERVER_UNRESPONSIVE) { // item will be retried\n            resolve({ user: _self.user.account });\n\n          } else {\n            reject(error);\n          }\n        });\n      }\n    });\n  }\n\n  observableUser() {\n    return this.user$;\n  }\n\n  setUserConfigItems(items) {\n    return new Promise(async (resolve, reject) => {\n      if (items === null) {\n        const msg = 'Missing key value items on setting user config.';\n        reject(new Error(msg));\n      }\n\n      await this.getUserConfig();\n\n      for await (const item of items) {\n        const key = Object.keys(item)[0];\n        this.userConfig[key] = item[key];\n      }\n\n      await this.keyValueStorageService.setItem(this.getUserId(), this.userConfig);\n\n      for await (const item of items) {\n        logger.info(item);\n        const key = Object.keys(item)[0];\n        const value =  item[key];\n\n        let obj = this.userConfigItemListeners.find((listener, i) => {\n          if (listener.key === key) {\n            listener.listener(value);\n            return true; // stop searching\n          }\n        });\n      }\n\n      resolve(true);\n    });\n\n  }\n\n  removeUserConfigItems(keys) {\n    return new Promise(async (resolve, reject) => {\n      if (keys === null) {\n        return;\n      }\n\n      let userConfig: any;\n      userConfig = this.getUserConfig();\n      if (userConfig === null) {\n        return;\n      }\n\n      for await (const key of keys) {\n        delete userConfig[key];\n      }    \n      this.localStorageService.setItem(this.getUserId(), JSON.stringify(userConfig));\n      await this.keyValueStorageService.setItem(this.getUserId(), JSON.stringify(userConfig));    \n    \n      resolve(true);\n    });\n\n  }\n\n}\n\n\n","import { Injectable, inject } from '@angular/core';\nimport { AccessManager } from '@formbird/shared';\nimport { LoggedInUserService } from '../user/logged-in-user.service';\nimport { User } from '@formbird/types';\nimport { Observable } from 'rxjs';\nimport { select } from '../../redux/decorators/select';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ClientAccessService {\n  private loggedInUserService = inject(LoggedInUserService);\n\n\n  @select(['userState', 'user']) user$: Observable<User>;\n  user: User;\n\n  constructor() {\n    this.user$.subscribe((user: User) => this.user = user);\n  }\n\n  checkAccess(targetDocument, operation) { // Implements 12125\n\n    if (!targetDocument) {\n      return true;\n    }\n\n    return AccessManager.checkAccess(targetDocument, this.user.accountControlDocument, operation);\n\n  }\n\n  hasPermission(targetDocument, operations) {\n    if (!targetDocument) {\n      return true;\n    }\n\n    return AccessManager.hasPermission(targetDocument, this.user.accountControlDocument, operations);\n  }\n\n  // Document access determined by comparing systemHeader.keyIds against the user's attachKeys.\n  // A new document inherits keyIds from its template and from the user that created it.\n  writeKeysToDocument(document, template) {\n    const userAccountControlDocument = this.user.accountControlDocument;\n    AccessManager.writeKeysToDocument(document, template, userAccountControlDocument);\n  }\n\n}\n","import { BroadcastEvent } from '@formbird/types';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { map, filter } from 'rxjs/operators';\n\nexport class BroadcastService {\n  private _eventBus: ReplaySubject<BroadcastEvent>;\n\n  constructor() {\n    this._eventBus = new ReplaySubject<BroadcastEvent>();\n  }\n\n  broadcast(key: any, data?: any) {\n    this._eventBus.next({ key, data });\n  }\n\n  on<T>(key: any): Observable<T> {\n    return this._eventBus\n      .pipe(filter(event => event.key === key))\n      .pipe(map(event => <T>event.data));\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { ClientConfig } from '@formbird/types';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ConfigService {\n\n  constructor() { }\n\n  clientConfig(): ClientConfig {\n    return window['ftClientConfig'];\n  }\n}\n","import { Injectable, ViewContainerRef, ComponentFactoryResolver, inject } from '@angular/core';\nimport { ComponentDefinition, DocumentData, FormParameters, User } from '@formbird/types';\n\nconst logger = console;\n\n@Injectable()\nexport class TemplateHtmlService {\n\n  factoryResolver;\n\n  constructor() {\n    const factoryResolver = inject(ComponentFactoryResolver);\n\n    this.factoryResolver = factoryResolver;\n  }\n\n      /**\n       * add the component to the view as a custom element\n       */\n      appendComponent(componentDefinition: ComponentDefinition,\n                      documentData: DocumentData,\n                      formParameters: FormParameters,\n                      user: User,\n                      key: number,\n                      vcr: ViewContainerRef,\n                      dynamicContainerComponent: any) {\n      if (componentDefinition.componentName) {\n\n        const factory = this.factoryResolver.resolveComponentFactory(dynamicContainerComponent);\n        const component = factory.create(vcr.parentInjector);\n\n        component.instance.formParameters = formParameters;\n        component.instance.tplItem = componentDefinition;\n        component.instance.documentData = documentData;\n        component.instance.key = key;\n        component.instance.user = user.filteredAccount;\n        vcr.insert(component.hostView);\n\n        // render a not found component if the component does not exist\n        // const componentName = componentDefinition.componentName\n\n        // const customElement = renderer.createElement(componentName);\n        //\n        // // pass the parameters of the component to the custom element\n        // customElement.componentDefinition = componentDefinition;\n        // customElement.document = documentData.document;\n        // customElement.template = documentData.template;\n        // customElement.formParameters = formParameters;\n        // customElement.key = key;\n        // customElement.account = user.filteredAccount;\n        // customElement.fieldName = componentDefinition.name;\n        // if (documentData.document) {\n        //     customElement.fieldValue = documentData.document[componentDefinition.name];\n        // }\n        //\n        // // insertBefore element to container\n        // renderer.appendChild(el.nativeElement, customElement);\n      }\n    }\n}\n","import { SharedConstants } from '@formbird/types';\nimport { Notyf } from 'notyf';\n\ndeclare var $: any;\n\nexport class NotificationService {\n  notyf: any;\n  private queue = [];\n  private currentMessage = {};\n  private _scope = null;\n  private _closeAllButton: HTMLButtonElement | null = null;\n  private _closeAllThreshold = 2;\n\n  constructor() {\n    this.notyf = new Notyf({\n      ripple: false,\n      types: [\n        {\n          type: 'warning',\n          className: 'notyf-warning',\n          icon: {\n            className: 'material-icons',\n            tagName: 'i',\n            text: 'warning'\n          }\n\n        },\n        {\n          type: 'info',\n          className: 'notyf-info',\n          dismissible: true,\n          icon: {\n            className: 'material-icons',\n            tagName: 'i',\n            text: 'info'\n          }\n        }\n      ]\n    });\n    this.ensureCloseAllButton();\n  }\n\n  /**\n   * position:\n   *     { x: 'right', y: 'top' }\n   *     { x: 'center', y: 'top' }\n   *     { x: 'left', y: 'top' }\n   *     { x: 'right', y: 'bottom' }\n   *     { x: 'center', y: 'bottom' }\n   *     { x: 'left', y: 'bottom' }\n   *      /**\n   *(e.g) position: { x: 'right', y: 'top' }\n   *     notyf position options\n   *     Param |       Type                | Details\n   *     x     |  left ; center or right  | x-position\n   *     y     | top  ; center or bottom  |  y-position\n   */\n\n   private ensureCloseAllButton() {\n    const container: HTMLElement = this.notyf?.view?.container;\n    if (!container) { return; }\n\n    if (!this._closeAllButton) {\n      const btn = document.createElement('button');\n      btn.className = 'notyf__close-all';\n      btn.type = 'button';\n      btn.title = 'Clear all notifications';\n       btn.style.display = 'none';\n      btn.innerHTML = '<i class=\"material-icons\" aria-hidden=\"true\">clear_all</i><span>Clear All</span>';\n      btn.setAttribute('aria-label', 'Clear all notifications');\n      btn.addEventListener('click', () => {\n        try { this.notyf.dismissAll(); } catch {}\n      });\n      container.insertBefore(btn, container.firstChild);\n      this._closeAllButton = btn;\n\n      const updateVisibility = () => {\n        const count = container.querySelectorAll('.notyf__toast').length;\n        const shouldShow = count >= this._closeAllThreshold;\n        \n        if (this._closeAllButton) {\n          if (shouldShow && this._closeAllButton.style.display === 'none') {\n            // Show button with entrance animation\n            this._closeAllButton.style.display = 'inline-flex';\n            this._closeAllButton.classList.remove('notyf__close-all--exiting');\n          } else if (!shouldShow && this._closeAllButton.style.display !== 'none') {\n            // Hide button with exit animation\n            this._closeAllButton.classList.add('notyf__close-all--exiting');\n            setTimeout(() => {\n              if (this._closeAllButton) {\n                this._closeAllButton.style.display = 'none';\n                this._closeAllButton.classList.remove('notyf__close-all--exiting');\n              }\n            }, 250); // Match animation duration\n          }\n        }\n      };\n\n      const observer = new MutationObserver(() => updateVisibility());\n      observer.observe(container, { childList: true });\n      updateVisibility();\n    }\n  }\n  private printNotyfMessage(message, options, title, position, preventDuplicate, onClickFunction, timeOut, customClassName) {\n    let messageType = options?.messageType || SharedConstants.STATUS_INFO;\n    let onCloseClickFunction = () => {};\n\n    if (typeof options !== 'object') {\n      messageType = options;\n    } else {\n      if (typeof options.onCloseClickFunction === 'function') {\n        onCloseClickFunction = options.onCloseClickFunction;\n      }\n    }\n\n    if (!position || /^toast/.test(position)) {\n      position = { x: 'right', y: 'top' };\n    }\n\n    preventDuplicate = preventDuplicate ? preventDuplicate : false;\n    const notyfMessage = !(!title || title === '') ? '<i class=\"notyf-message-type\">[' + messageType + ']</i><b>' +\n      title + '</b> <br/>' + message : message;\n\n\n    let lowerCaseMessageType = messageType.toLowerCase();\n    lowerCaseMessageType = lowerCaseMessageType === 'forbidden' ? SharedConstants.STATUS_ERROR : lowerCaseMessageType;\n\n    /** preventDuplicate condition\n     * if value is true, do not display duplicate notification\n     * if value is false, display duplicate notification\n     **/\n    if (preventDuplicate) {\n      const notyfTextContent = this.notyf.view.container.textContent;\n      let compareMessage = !(!title || title === '') ? '[' + messageType + ']' + title + ' ' + message : message;\n      if (lowerCaseMessageType === 'warning') {\n        compareMessage = 'warning' + compareMessage;\n      } else if (lowerCaseMessageType === 'info') {\n        compareMessage = 'info' + compareMessage;\n      }\n      /**The message is duplicate if notyfTextContent.split(compareMessage).length greater than 1\n       * The message is duplicate if preventDuplicate value is true and\n       * [title, message and messageType] are similar with new notification message\n       * */\n      if (notyfTextContent.split(compareMessage).length > 1) {\n        if (lowerCaseMessageType === 'success') {\n          console.log('%cDuplicate ' + lowerCaseMessageType + ' notification: ' + notyfMessage, `background: #3dc663;color:white`);\n        } else if (lowerCaseMessageType === 'info') {\n          console.log('%cDuplicate ' + lowerCaseMessageType + ' notification: ' + notyfMessage, `background: blue;color:white`);\n        } else if (lowerCaseMessageType === 'warning') {\n          console.log('%cDuplicate ' + lowerCaseMessageType + ' notification: ' + notyfMessage, `background: orange;color:white`);\n        } else if (lowerCaseMessageType === 'error') {\n          console.log('%cDuplicate ' + lowerCaseMessageType + ' notification: ' + notyfMessage, `background: #ed3d3d;color:white`);\n        } else if (lowerCaseMessageType === 'forbidden') {\n          console.log('%cDuplicate ' + lowerCaseMessageType + ' notification: ' + notyfMessage, `background: #ed3d3d;color:white`);\n        }\n        return;\n      }\n    }\n    \n    if(customClassName){\n      this.notyf.options.types = this.notyf.options.types.map(obj => {\n        return { ...obj, className: obj.className + ' ' + customClassName };\n      });\n    }\n\n    let notyfOptions = { type: lowerCaseMessageType, message: notyfMessage, duration: timeOut, dismissible: true, position: position };\n    \n    if (options && typeof options === 'object') {\n      notyfOptions = { ...notyfOptions, ...(options.notyfOptions || {}) };\n    }\n\n    const notification = this.notyf.open(notyfOptions);\n    notification.on('click', ({target, event}) => {\n      onClickFunction();\n    });\n\n    notification.on('dismiss', ({target, event}) => {\n      onCloseClickFunction();\n    });\n\n    return notification;\n  }\n\n  /**\n   * position:\n   *     { x: 'right', y: 'top' }\n   *     { x: 'center', y: 'top' }\n   *     { x: 'left', y: 'top' }\n   *     { x: 'right', y: 'bottom' }\n   *     { x: 'center', y: 'bottom' }\n   *     { x: 'left', y: 'bottom' }\n   *      /**\n   *(e.g) position: { x: 'right', y: 'top' }\n   *     notyf position options\n   *     Param |       Type                | Details\n   *     x     |  left ; center or right  | x-position\n   *     y     | top  ; center or bottom  |  y-position\n   */\n  private printHTML5Notification(message, messageType, title, position, preventDuplicate, onClickFunction, onCloseClickFunction, timeOut) {\n    const doPrintHTML5Notif = () => {\n      let icon;\n      const lowerCaseMessageType = messageType.toLowerCase();\n\n      switch (lowerCaseMessageType) {\n        case SharedConstants.STATUS_SUCCESS:\n          icon = './images/notifications/success.png';\n          break;\n        case SharedConstants.STATUS_INFO:\n          icon = './images/notifications/info.png';\n          break;\n        case SharedConstants.STATUS_WARNING:\n          icon = './images/notifications/warning.png';\n          break;\n        case SharedConstants.STATUS_ERROR:\n          icon = './images/notifications/error.png';\n          break;\n        case SharedConstants.STATUS_FORBIDDEN:\n          icon = './images/notifications/warning.png';\n          break;\n\n      }\n\n      const notification = new (<any>window).Notification('Formbird', {\n        body: message,\n        icon: icon,\n        dir: 'auto'\n      });\n\n      notification.onclick = function() {\n        onClickFunction();\n      };\n\n      notification.onclose = function() {\n        onCloseClickFunction();\n      };\n\n      if (timeOut) {\n        setTimeout(function() {\n          notification.close();\n        }, timeOut);\n      }\n\n      return notification;\n    };\n\n    if (Notification.permission === 'granted') {\n      return doPrintHTML5Notif();\n    } else {\n      (<any>window).Notification.requestPermission(function(permission) {\n        doPrintHTML5Notif();\n      });\n    }\n  }\n\n  /**\n   * Display both messages\n   */\n  public printMessage(message, options?, title?, position?, preventDuplicate?, displayDesktopNotification?,\n                      onClickFunction?, timeOut?, isPermanent?, customClassName?) {\n    if (typeof options === 'object') {\n      timeOut = options.timeOut || timeOut;\n      displayDesktopNotification = options.displayDesktopNotification || displayDesktopNotification;\n      isPermanent = options.isPermanent;\n      title = options.title || title;\n      position = options.position || position;\n      preventDuplicate = options.preventDuplicate || preventDuplicate;\n      onClickFunction = options.onClickFunction || onClickFunction;\n      customClassName = options.customClassName || customClassName;\n    }                    \n\n    if (isPermanent) {\n      timeOut = 0;\n    } else if (!timeOut) {\n      timeOut = 3000;\n    }\n\n    if (!onClickFunction) {\n      onClickFunction = function() {};\n    }\n\n    const notification: any = {};\n\n    if (displayDesktopNotification) {\n      let messageType = (typeof options === 'string' ? options : options.messageType) || SharedConstants.STATUS_INFO;\n      let onCloseClickFunction = options.onCloseClickFunction || (() => {});\n      notification.desktopNotification = this.printHTML5Notification(message, messageType, title, position, preventDuplicate, \n        onClickFunction, onCloseClickFunction, timeOut);\n    }\n\n    notification.notyfNotification = this.printNotyfMessage(message, options, title, position, preventDuplicate, onClickFunction, timeOut, customClassName);\n\n    return notification;\n  }\n\n  public dismiss(notification) {\n    if (notification.desktopNotification) {\n      notification.desktopNotification.close();\n    }\n\n    this.notyf.dismiss(notification?.notyfNotification);\n  }\n\n  public set(message) {\n    const msg = message;\n    this.queue.push(msg);\n  }\n\n  public get() {\n    return this.currentMessage;\n  }\n\n  public error(message, title?, displayDesktopNotification?) {\n\n    const messageType = SharedConstants.STATUS_ERROR;\n    const position = '';\n    const preventDuplicate = false;\n    const onClickFunction = null; // leave this undefined so the default will be used\n    const timeOut = 0;\n    const isPermanent = true; // make errors permanent so the user will see them if they miss the temporary popup\n\n    this.printMessage(message, messageType, title, position, preventDuplicate, displayDesktopNotification,\n      onClickFunction, timeOut, isPermanent);\n  }\n\n  public forbidden(message, title?, displayDesktopNotification?) {\n    if (!title) {\n      title = 'Forbidden';\n    }\n\n    this.error(message, title, displayDesktopNotification);\n  }\n\n  public info(message, title?, displayDesktopNotification?) {\n    this.printMessage(message, SharedConstants.STATUS_INFO, title, '', undefined, displayDesktopNotification);\n  }\n\n  public success(message, title?, displayDesktopNotification?) {\n    this.printMessage(message, SharedConstants.STATUS_SUCCESS, title, '', undefined, displayDesktopNotification);\n  }\n\n  public warning(message, title?, displayDesktopNotification?) {\n    this.printMessage(message, SharedConstants.STATUS_WARNING, title, '', undefined, displayDesktopNotification);\n  }\n\n  public setupAlert(scope, maxAlertMessages) {\n    this._scope = scope;\n    this._scope.MaxAlertMessages = [];\n    if (!maxAlertMessages) {\n      maxAlertMessages = 5;\n    }\n    for (let i = 0; i < maxAlertMessages; i++) {\n      const alertPlaceholderId = 'alert_placeholder_' + i;\n      this._scope.MaxAlertMessages.push(alertPlaceholderId);\n    }\n\n  }\n\n  public reverseSetupAlert() {\n    if (this._scope != null && this._scope.MaxAlertMessages != null) {\n      delete this._scope.MaxAlertMessages;\n    }\n  }\n}\n","'use strict';\n\n/**\n * A constants object for constants that are used on the client-side only\n */\nexport const ClientConstants = {\n  // Used for the search filter\n  FILTER: 'filter',\n  FILTERED_QUERY: 'queryToBeFiltered',\n\n  HTTP_STATUS_LOGIN_REJECTED: 401,\n\n  OPERATION_TYPE_POST: 'POST',        // HTTP Post (insert) operation\n  OPERATION_TYPE_PUT: 'PUT',          // HTTP Put (update) operation\n  OPERATION_TYPE_DELETE: 'DELETE',    // HTTP Delete operation\n\n  LAST_ENTERED_STATE_URL: 'LastEnteredStateUrl',\n  OFFLINE_LOGOUT: 'offlineLogout',\n  URL_EQUAL_REPLACEMENT_STRING: 'fttf',\n\n  // element ids\n  TOGGLE_ID_LEFT: 'left_close',\n\n  // broadcasts\n  DOCUMENT_NEW: 'document:new',\n  DOCUMENT_RENEW: 'document:renew',\n  DOCUMENT_SAVING: 'document:saving',\n  DOCUMENT_SAVED: 'document:saved',\n  DOCUMENT_CHANGED: 'document:changed',\n  DOCUMENT_DESTROYED: 'document:destroyed',\n  DOCUMENT_UPDATED: 'document:updated',\n  DOCUMENT_DELETED: 'document:deleted',\n  DOCUMENT_LOADED: 'document:loaded',\n  DOCUMENT_LOAD_ERROR: 'document:loadError',\n  VALIDATE_FORM_FIELDS: 'document:validateFormFields',\n  DOCUMENT_FORM_UPDATED: 'document:formUpdated',\n  PRESAVE_DOCUMENT_FORM_RESET: 'document:preSaveDocumentReset',\n\n  FORM_DETECT_CHANGES: 'form:detectChanges',\n\n  URL_CLICKED: 'url:clicked',\n\n  FORM_DIRTY_UPDATED: 'formDirty',\n  SPINNER_UPDATED: 'showSpinner',\n  FORM_RESET: 'formReset',\n\n  RULES_STATUS_STARTED: 'rules_status_started',\n  RULES_STATUS_DONE: 'rules_status_done',\n\n  // validation\n  VALIDATION_INTERVAL_TIME: 500, // 500 milliseconds\n  VALIDATION_REQUIRED_KEY: 'required',\n  VALIDATION_REQUIRED_MESSAGE: 'This field is required.',\n  VALIDATION_MIN_LENGTH_KEY: 'hasMinLength',\n  VALIDATION_MIN_LENGTH_MESSAGE: 'This field is required at least %s characters long.',\n  VALIDATION_MAX_LENGTH_KEY: 'hasMaxLength',\n  VALIDATION_MAX_LENGTH_MESSAGE: 'This field is required max %s characters long.',\n\n  CHANGED_DOCUMENT_LIST_ID_KEY: '___DOCUMENT_LIST_ID___',\n\n  FILE_SENT_EVENT_NAME: 'FileSentEventName',\n  LOCAL_STORAGE_OFFLINE_STATUS_KEY: 'OfflineStatus',\n  BEFORE_INSTALL_PROMPT: 'beforeinstallprompt',\n  DOCUMENT_SAVE_STATUS: 'document:save:status',\n  CHECK_UNSYNCED_DOCUMENTS: 'check_unsynced_documents',\n  WEB_SOCKET_STATUS: \"WebSocketStatus\"\n\n};\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { SharedUrlRoutes } from '@formbird/shared';\nimport { Observable, firstValueFrom } from 'rxjs';\n\nconst serverRoutes = SharedUrlRoutes.serverRoutes;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class SessionTestService {\n  private http = inject(HttpClient);\n\n\n  async testSession(): Promise<any> {\n    // returns an observable that shows whether the session to the server is connected\n    return await firstValueFrom(this.testSessionObservable());\n  }\n\n  testSessionObservable(): Observable<any> {\n    return this.http.get(serverRoutes.sessionTest, { responseType: 'text' });\n  }\n\n\n}\n","import { LoggedInUserService } from '../user/logged-in-user.service';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { merge } from 'lodash';\nimport { ClientConstants } from '../../constants/ClientConstants';\nimport { OfflineStatus, PageDownloadProgress, LastTileSyncDetails, User } from '@formbird/types';\nimport { IApplicationState } from '../../redux/state/application.state';\nimport { AppStore } from '../../redux/store/app.store';\nimport { offlineSetOfflineStatus } from '../../redux/actions/offline.actions';\nimport { KeyValueStorageService} from '../key-value-storage/key-value-storage.service';\nimport { SessionTestService } from '../session/session-test.service';\nimport { IndexedDBConstants } from '@formbird/indexed-db';\n\n@Injectable()\nexport class OfflineStatusService {\n  private loggedInUserService = inject(LoggedInUserService);\n  private appStore = inject<AppStore<IApplicationState>>(AppStore);\n  private keyValueStorageService = inject(KeyValueStorageService);\n  private sessionTestService = inject(SessionTestService);\n\n  public offlineStatus: OfflineStatus;\n  private offlineStatusSubject: Subject<OfflineStatus>;\n  offlineStatus$: Observable<OfflineStatus>;\n  pageDownloadProgress: PageDownloadProgress;\n\n  constructor() {\n\n    this.offlineStatus = {\n      unsyncedCount: 0,\n      connected: true,\n      incomingCacheCount: 0,\n      maxCacheCount: 0,\n      currentCacheCount: 0,\n      cacheLoading: false,\n      pendingDocumentCount: 0,\n      errorCacheCount: 0,\n      cachingApp: false,\n      initialCachingComplete: true,\n      connectionText: null,\n      currentStaticResourceCount: 0,\n      totalStaticResourceCount: 0,\n      tileServerCacheCount: 0,\n      tileServerMaxCacheCount: 0,\n      errorCacheAttachedFile: [],\n      errorOfflineChangesSyncDocs: [],\n      maxCacheAttachedFileCount: 0,\n      currentCacheAttachedFileCount: 0,\n      enabled: null,\n      operateOnline: true,\n      pendingUploadCount: 0\n    };\n\n    this.offlineStatusSubject = new Subject<OfflineStatus>();\n    this.offlineStatus$ = this.offlineStatusSubject.asObservable();\n\n    this.pageDownloadProgress = {\n      pageNumber: 0,\n      loaded: 0,\n      total: 0\n    };\n        \n    this.loggedInUserService.getUserConfig();\n  }\n\n  async initializeOfflineCounts() {\n    if (!this.isCachingEnabled()) {\n      return;\n    }\n\n    const userId = this.loggedInUserService.getUserId();\n    if (!userId) {\n      return;\n    }\n\n    try {\n      const dbName = IndexedDBConstants.FT_DOCUMENTS_DB_NAME_PREFIX + userId;\n      const getCount = (storeName: string): Promise<number> => {\n        return new Promise((resolve) => {\n          const request = indexedDB.open(dbName);\n          request.onsuccess = (event: any) => {\n            const db = event.target.result;\n            if (db.objectStoreNames.contains(storeName)) {\n              try {\n                const transaction = db.transaction(storeName, 'readonly');\n                const store = transaction.objectStore(storeName);\n                const countRequest = store.count();\n                countRequest.onsuccess = () => {\n                  const count = countRequest.result;\n                  db.close();\n                  resolve(count);\n                };\n                countRequest.onerror = () => {\n                  db.close();\n                  resolve(0);\n                };\n              } catch (e) {\n                db.close();\n                resolve(0);\n              }\n            } else {\n              db.close();\n              resolve(0);\n            }\n          };\n          request.onerror = () => resolve(0);\n        });\n      };\n\n      const documentsCount = await getCount(IndexedDBConstants.DOCUMENT_TABLE_NAME);\n      const offlineFilesCount = await getCount(IndexedDBConstants.OFFLINE_FILE_TABLE_NAME);\n\n      this.offlineStatus.currentCacheCount = documentsCount;\n      this.offlineStatus.currentCacheAttachedFileCount = offlineFilesCount;\n\n      // Keep max counts as at least the current counts if we don't have better info\n      if (this.offlineStatus.maxCacheCount < documentsCount) {\n        this.offlineStatus.maxCacheCount = documentsCount;\n      }\n      if (this.offlineStatus.maxCacheAttachedFileCount < offlineFilesCount) {\n        this.offlineStatus.maxCacheAttachedFileCount = offlineFilesCount;\n      }\n\n      // Cache storage counts\n      if ('caches' in window) {\n        const tilesCacheName = `tiles-${userId}`;\n\n        const tilesCache = await caches.open(tilesCacheName);\n        const tilesKeys = await tilesCache.keys();\n        this.offlineStatus.tileServerCacheCount = tilesKeys.length;\n        if (this.offlineStatus.tileServerMaxCacheCount < tilesKeys.length) {\n          this.offlineStatus.tileServerMaxCacheCount = tilesKeys.length;\n        }\n\n        const originWithSlash = `${window.location.origin}/`;\n\n        const staticCacheNames = [\n          'formbird-vendor-libs',\n          `workbox-precache-v2-${originWithSlash}`,\n          'formbird-dexie-addons'\n        ];\n\n        let staticResourceCount = 0;\n\n        for (const cacheName of staticCacheNames) {\n          try {\n            const cache = await caches.open(cacheName);\n            const keys = await cache.keys();\n            staticResourceCount += keys.length;\n          } catch (e) {\n            // Ignore errors for individual caches and continue\n          }\n        }\n\n        this.offlineStatus.currentStaticResourceCount = staticResourceCount;\n        if (this.offlineStatus.totalStaticResourceCount < staticResourceCount) {\n          this.offlineStatus.totalStaticResourceCount = staticResourceCount;\n        }\n      }\n\n      this.setOfflineStatusToLocalStorage();\n    } catch (error) {\n      console.error('Error initializing offline counts:', error);\n    }\n  }\n\n  isInitialCachingComplete() {\n    return this.offlineStatus.initialCachingComplete || this.loggedInUserService.getUserConfigItem('initialCachingComplete') === true;\n  }\n\n  isOfflineMode() {\n   let operateOnline = this.loggedInUserService.getUserConfigItem('operateOnline');\n    if (operateOnline === undefined || operateOnline === null)\n      return this.isCachingEnabled() && this.isInitialCachingComplete();\n    else {\n      return this.isCachingEnabled() && this.isInitialCachingComplete() && !this.shouldOperateOnline();\n    }\n  }\n\n  getLastSyncDate(): number {\n    // initial value is zero see this.loggedInUserService;\n    // fetch directly from the User settings so it will still work across logins\n    return this.loggedInUserService.getUserConfigItem('lastSyncDate');\n  }\n\n  setLastSyncDate(document) {\n    // update the last sync date if the date is later than the stored value. This will be used to sync new objects\n    // when data is saved or the app is loaded again. The sync will only happen from the last sync date value\n    if (document && document.systemHeader && document.systemHeader.serverUpdatedDate) {\n      // use the number of values since the epoch (1/1/1970) in milliseconds, as returned by the valueOf() function,\n      // so it can be used to easily compare\n      const syncDate = new Date(document.systemHeader.serverUpdatedDate).valueOf();\n      if (syncDate > this.getLastSyncDate()) {\n        this.loggedInUserService.setUserConfigItem('lastSyncDate', syncDate);\n      }\n    }\n  }\n\n  async setOfflineStatusToLocalStorage() {\n    await this.keyValueStorageService.setItem(ClientConstants.LOCAL_STORAGE_OFFLINE_STATUS_KEY, JSON.stringify(this.offlineStatus));    \n    //used to update loggedInUserService.userConfig property for the offine status change\n    await this.loggedInUserService.getUserConfig();\n\n    // publish offline status subject.\n    // This can be changed to publish the subject in other tabs when the data changes in localStorage\n    this.offlineStatusSubject.next(this.offlineStatus);\n    this.appStore.dispatch(offlineSetOfflineStatus(this.offlineStatus));\n    \n  }\n\n  /**\n   * Displays the loading cache status in the page\n   * @param isCacheLoading\n   * returns true if all pending documents had been cached.\n   */\n  setCacheLoadingStatus(isCacheLoading) {\n    this.offlineStatus.cacheLoading = isCacheLoading;\n    this.setOfflineStatusToLocalStorage();\n    return this.offlineStatus.currentCacheCount === this.offlineStatus.maxCacheCount;\n  }\n\n  isCacheLoading() {\n    return this.offlineStatus.cacheLoading;\n  }\n\n  setConnected() {\n    this.offlineStatus.connected = true;\n    this.offlineStatus.connectionText = 'Online';\n    this.setOfflineStatusToLocalStorage();    \n  }\n\n  setDisconnected() {\n    this.offlineStatus.connected = false;\n    this.offlineStatus.connectionText = 'Offline';\n    this.setOfflineStatusToLocalStorage();\n  }\n\n  addToMaxCacheCount(count) {\n    if (count) {\n      this.offlineStatus.maxCacheCount += count;\n      this.setOfflineStatusToLocalStorage();\n    }\n  }\n\n  setOperateOnline(operateOnline: boolean) {\n    const opOnline = operateOnline ? null: false;\n    this.offlineStatus.operateOnline = opOnline\n    this.loggedInUserService.setUserConfigItem('operateOnline', opOnline);\n    this.setOfflineStatusToLocalStorage();\n  }\n\n  shouldOperateOnline() {\n    let operateOnline = this.loggedInUserService.getUserConfigItem('operateOnline');\n    if (!operateOnline && operateOnline !== false) {\n      operateOnline = this.offlineStatus.operateOnline  !== false && this.offlineStatus.connected;\n    }\n\n    return operateOnline;\n  }\n\n  ignoreCacheDocument(doc) {\n    this.offlineStatus.currentCacheCount++;\n    this.offlineStatus.errorCacheCount++;\n\n    this.setOfflineStatusToLocalStorage();\n  }\n\n  getErrorCacheCount() {\n    return this.offlineStatus.errorCacheCount;\n  }\n\n  initialCacheQuerySuccess(document) {\n    this.offlineStatus.currentCacheCount++;\n    this.checkCurrentCacheCount();\n\n    this.setLastSyncDate(document);\n  }\n\n  checkCurrentCacheCount() {\n    if (this.offlineStatus.currentCacheCount >= this.offlineStatus.maxCacheCount) {\n      this.offlineStatus.currentCacheCount = 0;\n    }\n    this.setOfflineStatusToLocalStorage();\n  }\n\n  setInitialCachingComplete(complete) {\n    this.offlineStatus.initialCachingComplete = (complete === true);\n    this.setOfflineStatusToLocalStorage();\n  }\n\n  setPendingDocumentCount(pendingCount) {\n\n    this.offlineStatus.pendingDocumentCount = pendingCount;\n    this.loggedInUserService.setUserConfigItem('offlinePendingDocumentsCount', pendingCount);\n    this.setOfflineStatusToLocalStorage();\n  }\n\n  incPendingDocumentCount() {\n\n    this.offlineStatus.pendingDocumentCount++;\n    this.loggedInUserService.setUserConfigItem('offlinePendingDocumentsCount', this.offlineStatus.pendingDocumentCount);\n    this.setOfflineStatusToLocalStorage();\n  }\n\n  decPendingDocumentCount() {\n\n    this.offlineStatus.pendingDocumentCount--;\n    this.loggedInUserService.setUserConfigItem('offlinePendingDocumentsCount', this.offlineStatus.pendingDocumentCount);\n    this.setOfflineStatusToLocalStorage();\n  }\n\n  setPendingUploadCount(count: number) {\n    this.offlineStatus.pendingUploadCount = count;\n    this.setOfflineStatusToLocalStorage();\n  }\n\n  incPendingUploadCount() {\n    this.offlineStatus.pendingUploadCount++;\n    this.setOfflineStatusToLocalStorage();\n  }\n\n  decPendingUploadCount() {\n    if (this.offlineStatus.pendingUploadCount > 0) {\n      this.offlineStatus.pendingUploadCount--;\n      this.setOfflineStatusToLocalStorage();\n    }\n  }\n\n  isConnected() {\n    return this.offlineStatus.connected;\n  }\n\n  setCachingAppStatus(isCachingApp) {\n    this.offlineStatus.cachingApp = isCachingApp;\n    this.setOfflineStatusToLocalStorage();\n  }\n\n  setCurrentStaticResourceCount(count: number) {\n    this.offlineStatus.currentStaticResourceCount = count;\n    this.setOfflineStatusToLocalStorage();\n  }\n\n  setTotalStaticResourceCount(count: number) {\n    this.offlineStatus.totalStaticResourceCount = count;\n    this.setOfflineStatusToLocalStorage();\n  }\n\n  mergeOfflineStatusData(offlineStatus) {\n    merge(this.offlineStatus, offlineStatus);\n    this.setOfflineStatusToLocalStorage();\n  }\n  \n  checkServerConnectionStatus(){\n    const _self = this;\n    \n     return new Promise<any>((resolve, reject) => {\n      if (this.isOfflineMode()){\n         resolve(true);\n      } else {\n        this.sessionTestService\n          .testSession()\n          .then(\n            res => {\n              if (res===\"\"){\n                _self.setDisconnected();\n                resolve(false);\n              } else {\n                _self.setConnected();\n                resolve(true);\n              }\n\n            },\n            err => {\n              if (err.status === 401) {\n                _self.setConnected();\n                resolve(true);\n              } else {\n                _self.setDisconnected();\n                resolve(false);\n              }\n            }\n          );\n      }\n    });\n  }\n\n  getOfflineLoginConnectionPollTime() {\n    const config = (<any>window).ftClientConfig;\n    return config.offlineLoginConnectionPollTime || 1000;\n  }\n\n\n  setMaxCacheCount(count) {\n    if (count || count === 0) {\n      this.offlineStatus.maxCacheCount = count;\n      this.setOfflineStatusToLocalStorage();\n    }\n  }\n\n  setCachingEnabledStatus(enabled: boolean) {\n    this.offlineStatus.enabled = enabled;\n    this.loggedInUserService.setUserConfigItem('cachingEnabled', enabled);\n  }\n\n  isCachingEnabled() {\n    if (this.offlineStatus.enabled === null) { // enabled status is null, checking localstorage\n      this.offlineStatus.enabled = this.loggedInUserService.getUserConfigItem('cachingEnabled') === true;\n    }\n\n    return this.offlineStatus.enabled;\n  }\n\n  async checkErrorOfflineChangesSyncDocs() {\n    const usderId = await this.loggedInUserService.getUserId();\n    let userConfig: any = await this.keyValueStorageService.getItem(usderId);\n    if (userConfig) {\n      userConfig = JSON.parse(userConfig);\n      if (userConfig.ErrorOfflineChangesSyncDocs) {\n        this.offlineStatus.errorOfflineChangesSyncDocs = userConfig.ErrorOfflineChangesSyncDocs;\n      }\n    }\n  }\n\n  publishOfflineStatus() {\n    // publish offline status subject.\n    // This can be changed to publish the subject in other tabs when the data changes in localStorage\n    this.offlineStatusSubject.next(this.offlineStatus);\n    this.appStore.dispatch(offlineSetOfflineStatus(this.offlineStatus));\n  }\n  async getOfflineStatusFromKeyValueStorage() {\n    this.offlineStatus = await this.keyValueStorageService.getItem(ClientConstants.LOCAL_STORAGE_OFFLINE_STATUS_KEY);\n    return this.offlineStatus;\n  }\n\n  async loadOfflineStatusFromKeyValueStorage() {\n    try {\n      await this.getOfflineStatusFromKeyValueStorage();\n      this.publishOfflineStatus();\n\n      return this.offlineStatus;\n    } catch (error) {\n      console.error('Error loading offline status from key value storage:', error);\n      return null;\n    }\n  }\n\n  setLastTileSyncDetails(lastSyncDetails: LastTileSyncDetails) {\n    this.loggedInUserService.setUserConfigItem('lastSyncTileDetails', lastSyncDetails);\n  }\n\n  getLastTileSyncDetails(): LastTileSyncDetails {\n      return this.loggedInUserService.getUserConfigItem('lastSyncTileDetails') || { lastSyncX: 0, lastSyncY: 0 };\n  }\n\n  setAssetsCachingCompleted(completed: boolean) {\n    this.offlineStatus.initialAssetsCachingCompleted = completed;\n    this.loggedInUserService.setUserConfigItem('initialAssetsCachingCompleted', completed);\n  }\n\n  setDataCachingCompleted(completed: boolean) {\n    if (completed === true || this.offlineStatus.initialDataCachingCompleted !== true) {\n      console.log('Call set data caching completed: ', completed);\n      this.offlineStatus.initialDataCachingCompleted = completed;\n      this.loggedInUserService.setUserConfigItem('initialDataCachingCompleted', completed);\n    }  \n  }\n\n  isDataCachingCompleted() {\n    \n    if (this.offlineStatus.initialDataCachingCompleted === null) {\n      // initialDataCachingCompleted status is null, checking localstorage\n      this.offlineStatus.initialDataCachingCompleted = this.loggedInUserService.getUserConfigItem('initialDataCachingCompleted') === true;\n    }\n\n    return this.offlineStatus.initialDataCachingCompleted;\n  }\n\n  setMapTilesCachingCompleted(completed: boolean) {\n    this.offlineStatus.initialMapTilesCachingCompleted = completed;\n    this.loggedInUserService.setUserConfigItem('initialMapTilesCachingCompleted', completed);\n  }\n\n  checkCachingCompleted() {\n    \n    console.debug('offline status data: ', this.offlineStatus);\n    \n    const cacheLoading = this.offlineStatus.cacheLoading;\n    const initialAssetsCachingCompleted = this.offlineStatus.initialAssetsCachingCompleted || this.loggedInUserService.getUserConfigItem('initialAssetsCachingCompleted');\n    const initialDataCachingCompleted = this.offlineStatus.initialDataCachingCompleted || this.loggedInUserService.getUserConfigItem('initialDataCachingCompleted');\n    const initialMapTilesCachingCompleted = this.offlineStatus.initialMapTilesCachingCompleted || this.loggedInUserService.getUserConfigItem('initialMapTilesCachingCompleted');\n\n    if (\n      cacheLoading &&\n      initialAssetsCachingCompleted &&\n      initialDataCachingCompleted &&\n      initialMapTilesCachingCompleted\n    ) {\n      this.setCacheLoadingStatus(true);\n      this.setInitialCachingComplete(true);\n    }\n  }\n\n   async postMessageToServiceWorker(operateOnline) {\n      const registration = await navigator?.serviceWorker?.ready;\n      registration?.active?.postMessage({\n          type: 'OPERATE_ONLINE',\n          operateOnline\n      });\n    }\n}\n","import { Injectable, inject } from '@angular/core';\nimport * as Dexie from 'dexie';\nimport { LoggedInUserService } from '../user/logged-in-user.service';\nimport { PageVisibilityService } from '../page-visibility.service';\nimport { NotificationService } from '../notification/notification.service';\nimport { UtilArray } from '@formbird/shared';\nimport { KeyValueStorageService } from '../key-value-storage/key-value-storage.service';\nimport { OfflineStatusService } from '../offline-status/offline-status.service';\nimport { ConfigService } from '../config/config.service';\nimport { IndexedDBConnector, IndexedDBConstants } from '@formbird/indexed-db';\n\nconst logger = console;\n\n\n// Flags used to indicate if we need to wait for onupgradeneeded function to complete. This is to solve 10049#c33176\n// retrieve the db without upgrading it (like when the user refreshes the page after db was created)\nconst GET_DB_EVENT_DEFAULT = 0;\n\n// create the db, perform the default upgrade function and retrieve the db\nconst GET_DB_EVENT_INIT = 1;\n\n// perform search index upgrade function and retrieve the db\nconst GET_DB_EVENT_REG_SEARCH_INDEXES = 2;\n\nlet IndexedDBConnectorService$: any;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class IndexedDBConnectorService extends IndexedDBConnector{\n  private configService = inject(ConfigService);\n  private loggedInUserService = inject(LoggedInUserService);\n  private pageVisibilityService = inject(PageVisibilityService);\n  notificationService: NotificationService;\n  private keyValueStorageService: KeyValueStorageService;\n  private offlineStatusService = inject(OfflineStatusService);\n\n\n  documentIndexes: any[];\n  currentVersion: number;\n\n  constructor() {\n    const notificationService = inject(NotificationService);\n    const keyValueStorageService = inject(KeyValueStorageService);\n\n    super(keyValueStorageService, notificationService);\n    this.notificationService = notificationService;\n    this.keyValueStorageService = keyValueStorageService;\n\n    this.pageVisibilityService.registerVisibilityListener((isPageHidden) => {\n\n      if (isPageHidden) {\n        return;\n      }\n      if (this.offlineStatusService.isCachingEnabled()) {\n        this.getDatabase().then(() => {\n          let trueIdbVersion = this.loggedInUserService.getUserConfigItem('idbCurrentVersion'); // shared accross tabs\n          trueIdbVersion = trueIdbVersion == null ? 0 : trueIdbVersion;\n\n          let registeredIdbVersion = this.offlineDatabase.idbVersion;\n          registeredIdbVersion = registeredIdbVersion == null ? 0 : registeredIdbVersion;\n\n          // reload since there's a new version of idb due to cache being enabled by another tab, or new search indexes\n          // registered by another tab.\n          if (typeof window !== 'undefined' && trueIdbVersion !== registeredIdbVersion) {\n            window.location.reload();\n          }\n        }, (error) => {\n          logger.error(error);\n        });\n      }\n    });\n\n    IndexedDBConnectorService$ = this;\n  }\n\n  getLoggedInUserService() {\n    return this.loggedInUserService;\n  }\n\n  async getDatabase(): Promise<any> {\n    if (!this.offlineStatusService.isCachingEnabled()) {\n      this.loggedInUserService.setUserConfigItem('idbCurrentVersion', 0);\n      throw new Error('Attempted to access IndexedDB database when offline is not enabled.');\n    }\n\n    if (this.offlineDatabase.idb && this.offlineDatabase.idb.isOpen()) {\n      return this.offlineDatabase.idb;\n    }\n\n    // Lazy-load Dexie\n    const persistResult = await this.tryPersistWithoutPromptingUser();\n\n    switch (persistResult) {\n      case \"never\":\n        logger.info(\"Not possible to persist storage\");\n        break;\n      case \"persisted\":\n        logger.info(\"Successfully persisted storage silently\");\n        break;\n      case \"prompt\":\n        logger.info(\"Not persisted, but we may prompt user when we want to.\");\n        const persistent = await navigator.storage.persist();\n        if (persistent) {\n          logger.info(\"Not persisted, but we may prompt user when we want to.\");\n        } else {\n          logger.warn(\"Storage may be cleared by the UA under storage pressure.\");\n          const message = \"If your device is low on storage, the offline database may be cleared\\ \" +\n            \"in this browser. Please choose a browser that does not have this limitation\";\n          logger.warn(message);\n          //this.notificationService.printMessage(message, 'warning', null, { x: 'right', y: 'top' });\n        }\n        break;\n    }\n\n    this.idbName = IndexedDBConstants.FT_DOCUMENTS_DB_NAME_PREFIX + this.loggedInUserService.getUserId();\n\n    const addons = [];\n    const dexieAddons = this.configService.clientConfig().offline?.dexieAddons || [];\n    const cacheStorage = await caches.open(\"formbird-dexie-addons\");\n\n    for (const dexieAddon of dexieAddons) {\n      try {\n        const module = await import(/* webpackIgnore: true */ dexieAddon.fileName);\n        addons.push(module[dexieAddon.exportName]);\n\n        const key = 'dexieAddons:' + dexieAddon.exportName;\n        const fileName = await this.keyValueStorageService.getItem(key);\n        if (fileName !== dexieAddon.fileName) {\n          cacheStorage.add(dexieAddon.fileName);\n          this.keyValueStorageService.setItem(key, dexieAddon.fileName);\n        }\n      } catch (err) {\n        //proceed even if not found or any error\n        logger.error(\"Unabe to load addon: \" + dexieAddon.fileName + \". Reason: \" + err.message);\n      }\n    }\n\n    const db = new Dexie.default(this.idbName, { addons });\n\n    this.documentIndexes = [...IndexedDBConstants.DOCUMENT_INDEXES];\n    let indexes = this.loggedInUserService.getUserConfigItem('searchIndexes');\n\n    for (let i = 0; i < indexes.length; i++) {\n      UtilArray.add(this.documentIndexes, indexes[i], true, null);\n    }\n\n    this.currentVersion = this.loggedInUserService.getUserConfigItem('idbCurrentVersion');\n    this.currentVersion = (this.currentVersion && this.currentVersion >= IndexedDBConstants.VERSION) ? this.currentVersion : IndexedDBConstants.VERSION;\n\n    // Open the database as a dexie database\n    db.version(this.currentVersion).stores({\n      // each table has a list of indexes assigned. The first index is the primary key,\n      // so systemHeader.versionId\n      // is the primary key for documents\n      documents: this.documentIndexes.toString(),\n      ftProperties: 'key',\n      offlineFiles: 'fileNo, status'\n    });\n\n    db.open();\n\n    this.offlineDatabase.idb = db;\n    this.offlineDatabase.idbVersion = this.currentVersion;\n\n    this.loggedInUserService.setUserConfigItem('searchIndexes', this.documentIndexes);\n    this.loggedInUserService.setUserConfigItem('idbCurrentVersion', this.currentVersion);\n\n    return this.offlineDatabase.idb;\n  }\n\n  upgradeOfflineDatabase(indexes) {\n    const currentVersion = this.loggedInUserService.getUserConfigItem('idbCurrentVersion');\n    const nextVersion = Number(currentVersion) + 1;\n\n    const db = this.offlineDatabase.idb;\n    if (db) {\n      db.close();\n      db.version(nextVersion).stores({\n          documents: indexes.toString(),\n          ftProperties: 'key',\n          offlineFiles: 'fileNo, status'\n        }\n      );\n\n      this.loggedInUserService.setUserConfigItem('searchIndexes', indexes);\n      this.loggedInUserService.setUserConfigItem('idbCurrentVersion', nextVersion);\n      this.keyValueStorageService.setItem('idbCurrentVersion', nextVersion);\n      this.offlineDatabase.idbVersion = nextVersion;\n      this.offlineDatabase.idb = db;\n\n      db.open().then(() => {\n        logger.info('>>>>>>>>>>>>>>>>>>>>Offline DB has been upgraded to version: ' + nextVersion);\n      }).catch((err) => {\n        logger.warn(err);\n        this.notificationService.warning('Failed to apply the saved \"indexedDBIndexes\": ' \n          + err.message, 'Warning');\n      });\n    }\n  }\n\n  // /**\n  //  THIS METHOD IS NOT USED ANY WHERE. WILL BE CONVERTED TO ANGULAR LATER.\n  //  * Generic function for opening\n  //  * @param version\n  //  * @param requestEvent\n  //  * @returns {jQuery.promise|promise|*}\n  //  */\n  // function openOfflineDatabase(version, requestEvent){\n  //   var deferred = $q.defer();\n  //\n  //   var onsuccessComplete = false;\n  //   //we should wait for upgrade in two cases: [1]upon creating the database & [2]upon registering search indexes\n  //   var dontWaitForUpgrade = requestEvent === GET_DB_EVENT_DEFAULT;\n  //   var onupgradeComplete = dontWaitForUpgrade;//regard as completed if don't wait\n  //\n  //   /**\n  //    * Chrome and Firefox do not behave the same way when it comes to the order/timing which IDBDatabase.onsuccess\n  //    * and IDBDatabase.onupgradeneeded functions. resolveOpenRequest will make sure that onupgradeneeded function\n  //    * completes before we return the IDBDatabase reference to those who request it via the getDatabase function.\n  //    *\n  //    * See 10049#c33176\n  //    */\n  //   var resolveOpenDBRequest = function(IDBDatabase){\n  //     if(onsuccessComplete && onupgradeComplete){\n  //       deferred.resolve(IDBDatabase);\n  //       $rootScope.$digest();\n  //       return deferred.promise;\n  //     }\n  //   };\n  //\n  //   var idbName = LoggedInUserService.getUserId();\n  //\n  //   var dbRequest = indexedDB.open(idbName, parseInt(version));\n  //\n  //   dbRequest.onblocked = function(event) {\n  //     logger.info(\"IndexedDB Event: indexedDB blocked. \");\n  //   };\n  //\n  //   dbRequest.onerror = function (event) {\n  //     var msg = \"Error opening indexedDB: \" + event.target.error.message;\n  //     logger.error(msg);\n  //     if (event.target.error.name === \"VersionError\") {\n  //\n  //       var nextVersion = parseInt(version) + 1;\n  //       LoggedInUserService.setUserConfigItem('idbCurrentVersion', nextVersion);\n  //       logger.info(\"Reloading page to open IDB with version: \" + nextVersion);\n  //\n  //       $window.location.reload();\n  //\n  //     } else if (event.target.error.name === \"AbortError\") {\n  //       logger.error(\"Error: AbortError.\");\n  //     } else {\n  //       logger.error(\"Error: \" + event.target.error.name);\n  //       deferred.reject(event.target.error);\n  //     }\n  //   };\n  //\n  //   dbRequest.onsuccess = function (event) {\n  //     // only set the database version when the upgrade is successful\n  //     LoggedInUserService.setUserConfigItem('idbCurrentVersion', version);\n  //\n  //     logger.info('IndexedDB Event: ' + indexedDBConstants.DB_NAME + ' storage opened successfully. Version: ' + version);\n  //\n  //     var database = dbRequest.result;\n  //\n  //     database.onclose = function (evt) {\n  //       logger.info(\"Closing indexedDB database: \" + database.name);\n  //       $window.alert(\"Offline database closed.\");\n  //     };\n  //\n  //     database.onabort = function (evt) {\n  //       logger.error(\"IndexedDB abort occured: \" + evt.target.error.message);\n  //       logger.error(evt);\n  //     };\n  //\n  //     database.onversionchange = function (evt) {//another tab might have upgraded the database\n  //       logger.info('IndexedDB Event: database version changed.');\n  //\n  //       ModalService.showDialog('A new version for the offline database is available. Please reload.',\n  //         'WARNING',\n  //         function () {\n  //           $window.location.reload();\n  //         },\n  //         function () {\n  //\n  //         });\n  //     };\n  //\n  //     database.onerror = function(evt){\n  //       logger.error('IDBDatabase error occurred: ' + evt.target.error.message);\n  //       logger.error(evt);\n  //     };\n  //\n  //     onsuccessComplete = true;\n  //     resolveOpenDBRequest(database);\n  //\n  //   };\n  //\n  //   var defaultUpgradeFunc =  function (event) {\n  //\n  //     var database = event.target.result;\n  //     //If the an objectStore's structure is modified in a future version, make sure to remove\n  //     //the old version of the objectStore (if it exists)\n  //\n  //     //recreate tables to prep for whatever structural changes in the indexes\n  //     var tables = [\n  //       {\n  //         name: indexedDBConstants.DOCUMENT_TABLE_NAME,\n  //         param: { keyPath: \"systemHeader.versionId\", autoIncrement: false},\n  //         indexes : [\n  //           {\n  //             name:  indexedDBConstants.DOCUMENT_INDEX_VERSION_ID,\n  //             path: \"systemHeader.versionId\",\n  //             unique: true\n  //           },\n  //           {\n  //             name: indexedDBConstants.DOCUMENT_INDEX_DOCUMENT_ID,\n  //             path: \"documentId\",\n  //             unique: false\n  //           },\n  //           {\n  //             name: indexedDBConstants.DOCUMENT_INDEX_PENDING_OPERATION,\n  //             path: \"systemHeader.offline.status\",\n  //             unique: false\n  //           },\n  //           {\n  //             name: indexedDBConstants.DOCUMENT_INDEX_SYSTEM_TYPE,\n  //             path: \"systemHeader.systemType\",\n  //             unique: false\n  //           }\n  //         ]\n  //       },\n  //       {\n  //         name: indexedDBConstants.FT_PROPERTIES_TABLE_NAME,\n  //         param:{ keyPath: \"key\", autoIncrement: false},\n  //         indexes : [\n  //           { name: \"key\", path: \"key\", unique: true }\n  //         ]\n  //       },\n  //       {\n  //         name: indexedDBConstants.OFFLINE_FILE_TABLE_NAME,\n  //         param: { keyPath: 'fileNo', autoIncrement : false},\n  //         indexes:[\n  //           { name: \"fileNo\", path: \"fileNo\", unique: true },\n  //           { name: \"status\", path: \"status\", unique: false }\n  //         ]\n  //       }\n  //     ];\n  //\n  //     //recreate tables for new structural changes in the indexes\n  //     for(var i = 0 ; i < tables.length ; i++){\n  //       var tbl = tables[i];\n  //       //Do not add recreate already existing objectStores else an ConstraintError error will be thrown.\n  //       if(database.objectStoreNames.contains(tbl.name)){\n  //         database.deleteObjectStore(tbl.name);\n  //       }\n  //       var store = database.createObjectStore(tbl.name, tbl.param);\n  //       for(var z = 0 ; z < tbl.indexes.length; z++){\n  //         var index = tbl.indexes[z];\n  //         createIndex(store, index.name, index.path, index.unique);\n  //       }\n  //     }\n  //\n  //     logger.info(\"IndexedDB Event: Default offline database indexes set.\");\n  //\n  //     onupgradeComplete = true;\n  //     resolveOpenDBRequest(database);\n  //\n  //   };\n  //\n  //   var registerSearchIndexesFunc = function (event) {\n  //\n  //     var searchIndexes = LoggedInUserService.getUserConfigItem('searchIndexes');\n  //     var objectStore = event.target.transaction.objectStore(indexedDBConstants.DOCUMENT_TABLE_NAME);\n  //\n  //     for(var x = 0 ; x < searchIndexes.length ; x++){\n  //       var value = searchIndexes[x].replace(\".\", \"___\");\n  //       createIndex(objectStore, value, value, false);\n  //     }\n  //\n  //     //record all registered indexes\n  //     var registered = LoggedInUserService.getUserConfigItem('registeredSearchIndexes');\n  //     LoggedInUserService.setUserConfigItem('registeredSearchIndexes', angular.extend(registered, searchIndexes));\n  //\n  //     logger.info(\"Search indexes registered.\" + searchIndexes);\n  //\n  //     onupgradeComplete = true;\n  //     var database = event.target.result;\n  //     resolveOpenDBRequest(database);\n  //   };\n  //\n  //   var regSearchIndexes = requestEvent === GET_DB_EVENT_REG_SEARCH_INDEXES;\n  //\n  //   dbRequest.onupgradeneeded = regSearchIndexes ? registerSearchIndexesFunc: defaultUpgradeFunc;\n  //\n  //   return deferred.promise;\n  //\n  // }\n\n  upgradeIndexedDB(): Promise<any> {\n\n    const searchIndexes = this.loggedInUserService.getUserConfigItem('searchIndexes');\n    const registered = this.loggedInUserService.getUserConfigItem('registeredSearchIndexes');\n\n    let hasUnregisteredIndex = false;\n\n    for (let k = 0; k < searchIndexes.length; k++) {\n\n      hasUnregisteredIndex = registered.indexOf(searchIndexes[k]) === -1;\n\n      if (hasUnregisteredIndex) {\n        break;\n      }\n    }\n\n    if (!hasUnregisteredIndex) {\n      return Promise.resolve(); // just return a resolved promise\n    }\n\n    return this.getDatabase();\n  }\n\n  /**\n   * open an IndexedDB cursor\n   * @param cursorIndexName - the name of the index to open a cursor on\n   * @param cursorRange - an IndexedDBKeyRange (part of the IndexedDB api) of the cursor to open\n   * @returns promise.promise|*|jQuery.promise the promise\n   */\n  openCursor(cursorIndexName, cursorRange) {\n\n    const _self = this;\n\n    return new Promise((resolve, reject) => {\n\n      _self.getDatabase().then(function(db: any) {\n\n        const tbl = IndexedDBConstants.DOCUMENT_TABLE_NAME;\n        const transaction = db.transaction(tbl, 'readwrite');\n        const store = transaction.objectStore(tbl);\n        const index = store.index(cursorIndexName);\n\n        const request = index.openCursor(cursorRange);\n\n        request.onsuccess = function() {\n          const cursor = request.result;\n          resolve(cursor);\n        };\n\n        request.onerror = function() {\n          reject('Error opening indexedDB cursor in table: ' + tbl);\n        };\n\n      },(error) => {\n        reject(error);\n      });\n    });\n\n  }\n\n  private createIndex(objectStore, indexName, keyPath, isUnique) {\n\n    if (!UtilArray.contains(objectStore.indexNames, indexName)) {\n\n      objectStore.createIndex(indexName, keyPath, { unique: !!isUnique });\n\n    }\n  }\n\n  closeDatabase() {\n\n    if (this.offlineDatabase.idb != null) {\n\n      this.offlineDatabase.idb.delete();\n      this.offlineDatabase.idb = null;\n      this.offlineDatabase.idbVersion = null;\n      this.offlineDatabase.state = 'closed';\n\n    }\n\n    return Promise.resolve();\n\n  }\n\n\n}\n","import { UtilType } from '@formbird/shared';\n\nexport class UtilService {\n\n  public static getDataUrl(url, id?) {\n    let dataUrl = url;\n\n    if (UtilType.hasValue(id)) {\n      dataUrl += '/' + id;\n    }\n\n    return dataUrl;\n  }\n\n  public static hasValue(val) {\n    return UtilType.hasValue(val);\n  }\n\n  public static isDefined(val) {\n    return UtilType.isDefined(val);\n  }\n\n}\n","import { Injectable, inject } from '@angular/core';\nimport { formSetDocumentSession } from '../../redux/actions';\nimport { AppStore } from '../../redux/store/app.store';\nimport { IApplicationState } from '../../redux/state/application.state';\nimport { select } from '../../redux/decorators/select';\nimport { Observable, Subscription } from 'rxjs';\nimport { cloneDeep } from 'es-toolkit';\n\nconst logger = console;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DocumentSessionService {\n  private appStore = inject<AppStore<IApplicationState>>(AppStore);\n\n  @select(['formState', 'documentSession']) documentSession$: Observable<any>;\n  private subs: Subscription = new Subscription();\n  private documentSession : any;\n  constructor() {\n    this.documentSession = {};\n    if (this.documentSession$){\n      this.documentSession$.subscribe(documentSession => {\n        // logger.info(\"Changed documentSession value : \" + JSON.stringify(documentSession));\n      });\n    }\n\n  }\n\n  initialize(documentId){\n    this.setDocumentSession(documentId, {})\n  }\n\n  setDocumentSession(documentId, document?) {\n    this.appStore.dispatch(formSetDocumentSession(document, documentId));\n  }\n\n  getDocumentSession(documentId: string) {\n    this.documentSession = cloneDeep(this.appStore.getState().formState.documentSession[documentId]);\n    return this.documentSession ? this.documentSession : {};\n  }\n\n  /**\n   * Clear the document session for a given document id\n   * @param documentId - the document id to clear the session for\n   */\n  clearDocumentSession(documentId: string) {\n    this.appStore.dispatch(formSetDocumentSession(null, documentId));\n  }\n\n}\n","import { Injectable, inject } from '@angular/core';\nimport { IndexedDBConnectorService } from './indexed-dbconnector.service';\nimport { UtilHttpStatus } from '@formbird/shared';\n\nconst logger = console;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DexieSearchService {\n  private indexedDBConnectorService = inject(IndexedDBConnectorService);\n\n\n  private getDatabase() {\n    return this.indexedDBConnectorService.getDatabase();\n  }\n\n  public search(query) {\n\n    const _self = this;\n\n    return new Promise((resolve, reject) => {\n\n      logger.debug('Doing search in DexieSearchService...');\n\n      if (query.dexieSearchFunction) {\n\n        _self.getDatabase().then(function(db) {\n\n          query.dexieSearchFunction(db, function (err, data) {\n            if (err) {\n              logger.error('Error in Dexie: ');\n              logger.error(err);\n              reject(err);\n            } else {\n              const results: any = {\n                statusCode: UtilHttpStatus.OK,\n                searchProvier: 'dexie',\n                data: { data: [] },\n                total: 0\n              };\n\n              if (data) {\n                if (!query.includeAllVersions) {\n                  const filtered = data?.filter(doc => doc.systemHeader?.currentVersion === true) || data;\n                  results.data = { data: filtered };\n                  results.total = filtered.length;\n                } else {\n                  results.total = data.length;\n                  results.data = data;\n                }\n              }\n\n              resolve(results);\n            }\n          });\n        },(error) => {\n          reject(error);\n        });\n\n      } else {\n\n        const msg = 'Dexie search not specified for offline querying';\n        reject(new Error(msg));\n      }\n\n    });\n  }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Observable, Subject, takeUntil } from 'rxjs';\nimport { WorkerService } from '../worker/workers.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class DexieWorkerService {\n    private workerService = inject(WorkerService);\n\n    private worker: any;\n    private resolveMap: any = {};\n    private rejectMap: any = {};\n    private pageId: any;\n    private pendingQueries: Map<string, Subject<void>> = new Map();\n\n    initWorker() {\n        this.worker = this.workerService.getWorker('dexie');\n        console.log('****** this.worker = ', this.worker);\n        if (this.worker) {\n            return;\n        }\n        // Unique identifier for this page/tab\n        this.pageId = Math.random().toString(36).substring(2, 15);\n        console.log('**** pageId = ', this.pageId);\n\n        this.worker = new Worker('dexieWorker.js');\n        if (!this.worker) {\n            console.error('Does not support Web Workerr');\n        }\n        console.log('****** DONE initWorker, this.worker = ', this.worker);\n        if (this.worker) {\n            this.workerService.addWorker('dexie', this.worker);\n\n            const messageHandler = (e: any) => {\n                console.log(`***** messageHandler: dexie worker service receives message\n                \\t\\t - current page url : ${window.location.href}\n                \\t\\t - e = `, e);\n                if (e?.data?.pageId === this.pageId && e?.data?.pageUrl === window.location.href) {\n                    const { action, searchId, results, error, query } = e.data;\n                    const queryKey = `${this.pageId}-${window.location.href}-${query}`;\n\n                    if (action === 'result') {\n                        console.log('***** messageHandler: RESOLVE, result = ', results);\n                        if (this.resolveMap[searchId]) {\n                            console.log('***** messageHandler: resolveMap, typeof: ' + typeof(this.resolveMap[searchId])\n                             + ', searchId = ', searchId);\n                            this.resolveMap[searchId](results);\n                            delete this.resolveMap[searchId];\n                            delete this.rejectMap[searchId];\n                        } else {\n                            // messageHandler called without resolver\n                            // do nothing\n                        }\n\n                        // Check for pending queries and resolve them\n                        if (this.pendingQueries.has(queryKey)) {\n                            const pendingPromise: any = this.pendingQueries.get(queryKey);\n                            if (pendingPromise && typeof pendingPromise.resolve == 'function') {\n                                console.log('***** messageHandler: pendingPromise');\n                                pendingPromise.resolve(results);\n                            }\n                            this.pendingQueries.delete(queryKey);\n                        }\n                    } else if (action === 'error') {\n                        console.log('***** messageHandler: REJECT, error = ', error);\n                        if (this.rejectMap[searchId]) {\n                            console.log('***** messageHandler: rejectMap');\n                            this.rejectMap[searchId](new Error(error));\n                            delete this.resolveMap[searchId];\n                            delete this.rejectMap[searchId];\n                        } else {\n                            // messageHandler called without rejector\n                            // throw the error\n                            throw new Error(error);\n                        }\n\n                        // Check for pending queries and reject them\n                        if (this.pendingQueries.has(queryKey)) {\n                            const pendingPromise: any = this.pendingQueries.get(queryKey);\n                            if (pendingPromise && typeof pendingPromise.reject == 'function') {\n                                console.log('***** messageHandler: pendingPromise');\n                                pendingPromise.reject(new Error(error));\n                            }\n                            this.pendingQueries.delete(queryKey);\n                        }\n                    }\n\n                }\n                \n            };\n\n            this.worker.onmessage = messageHandler;\n\n            window.addEventListener('beforeunload', () => {\n                console.log('****** event before unload ************');\n                // Send message to Worker to close connection to IndexedDB\n                const workerOptions = {\n                    action: 'closeDatabase',\n                    pageId: this.pageId,\n                    pageUrl: window.location.href,\n                    searchId: Date.now()\n                };\n                this.worker?.postMessage(workerOptions);\n            });\n        }\n    }\n\n    search(idbName: string, currentVersion: number, documentIndexes: any\n        , searchId: any, options: any): Observable<any> {\n        const _self = this;\n        // console.log('**** search, options = ', options);\n        const queryKey = `${this.pageId}-${window.location.href}-${JSON.stringify(options.filter)}`;\n        console.log(`**** queryKey = ${queryKey}`);\n\n        // If a query with the same key is already pending, return the existing promise\n        if (this.pendingQueries.has(queryKey)) {\n            this.pendingQueries.get(queryKey).next();\n            this.pendingQueries.delete(queryKey);\n            console.log('*** Previous search task cancelled for queryKey:', queryKey);\n        }\n\n        const cancelSubject = new Subject<void>();\n        this.pendingQueries.set(queryKey, cancelSubject);\n\n        const searchObservable = new Observable<any>(observer => {\n            try {\n\n                console.log('***** dexie worker service calls search...., this.worker = ' + this.worker);\n\n                this.resolveMap[searchId] = (result: any) => {\n                    observer.next(result);\n                    observer.complete();\n                    this.pendingQueries.delete(queryKey);\n                };\n                this.rejectMap[searchId] = (error: any) => {\n                    observer.error(error);\n                    this.pendingQueries.delete(queryKey);\n                };\n                \n                const transferableOptions: any = {};\n\n                Object.entries(options).forEach(([key, value]) => {\n                    if (\n                    !(value instanceof Error) &&\n                    !(value instanceof Function) &&\n                    !(value instanceof Node) &&\n                    !(value instanceof Window) &&\n                    !(typeof value === 'function')\n                    ) {\n                    transferableOptions[key] = value;\n                    }\n                });\n                \n                \n\n                const clientConfig = globalThis.ftClientConfig;\n                const dexieAddons = clientConfig.offline?.dexieAddons || [];\n\n                const worker = this.workerService.getWorker('dexie');\n                if (!worker){\n                    _self.initWorker();\n                }               \n                 \n                const workerOptions = {\n                    action: 'search',\n                    pageId: _self.pageId,\n                    pageUrl: window.location.href,\n                    searchId,\n                    options: {\n                        idbName,\n                        currentVersion,\n                        documentIndexes: documentIndexes,\n                        query: transferableOptions\n                    },\n                    dexieAddons\n                };\n               \n                _self.worker?.postMessage(JSON.stringify(workerOptions));\n                \n            } catch (error) {\n                console.error('Can not call web worker, error = ', error);\n                observer.error(error);\n                this.pendingQueries.delete(queryKey);\n            }\n        }).pipe(takeUntil(cancelSubject));\n\n\n        return searchObservable;\n    }\n    \n}\n","export class SearchQueue {\n    private queue: (() => Promise<any>)[] = [];\n    private isProcessing: boolean = false;\n\n    addToQueue(searchFunction: () => Promise<any>) {\n        this.queue.push(searchFunction);\n        this.processQueue();\n    }\n\n    async processQueue() {\n        if (this.isProcessing) {\n            return;\n        }\n\n        this.isProcessing = true;\n        while (this.queue.length > 0) {\n            const searchFunction = this.queue.shift();\n            if (searchFunction) {\n                try {\n                    await searchFunction();\n                } catch (error) {\n                    console.error('Error during search:', error);\n                }\n            }\n        }\n        this.isProcessing = false;\n    }\n}","import { Injectable, inject } from '@angular/core';\nimport { FileReferenceDetails, FileReferenceDocument } from '@formbird/types';\nimport { LoggedInUserService } from '../user/logged-in-user.service';\nimport { NotificationService } from '../notification/notification.service';\nimport { OfflineStatusService } from '../offline-status/offline-status.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class OpfsCacheService {\n  loggedInUserService = inject(LoggedInUserService);\n  private notificationService = inject(NotificationService);\n  private offlineStatusService = inject(OfflineStatusService);\n\n  constructor(\n  ) { }\n\n  async cacheFile(file: Pick<FileReferenceDetails, 'fileNo'>, blob: Blob) {\n    const opfsRoot = await navigator.storage.getDirectory();\n    const dirName = this.getDirectoryName();\n    const filesDir = await opfsRoot.getDirectoryHandle(dirName, { create: true });\n    if (await this.getCachedFile(file.fileNo) !== null) {\n      console.warn('File already exists in cache, overwriting', file.fileNo);\n    } else {\n      // Only increment if the file is not already in the cache\n      this.offlineStatusService.incPendingUploadCount();\n    }\n    const fileHandle = await filesDir.getFileHandle(`${file.fileNo}`, { create: true });\n    const writeable = await fileHandle.createWritable();\n    await writeable.write(blob);\n    await writeable.close();\n  }\n\n  async clearData() {\n    try {\n      this.notificationService.info(\"Clearing offline files in the background...\");\n      const dirName = this.getDirectoryName();\n\n      const userAgent = navigator.userAgent;\n      if (/android/i.test(userAgent) && (/chrome/i.test(userAgent))) {\n        const opfsRoot = await navigator.storage.getDirectory();\n        opfsRoot.removeEntry(dirName, { recursive: true });\n        this.offlineStatusService.setPendingUploadCount(0);\n      } else {\n        const sharedWorker = new SharedWorker('opfs-cache.worker.js');\n\n        const result = await new Promise<{ success: boolean; message: string }>((resolve, reject) => {\n          sharedWorker.port.onmessage = (event) => {\n            resolve(event.data);\n          };\n\n          sharedWorker.onerror = (error) => {\n            console.error('Shared Worker Error:', error.message);\n            reject(new Error('An error occurred in the Shared Worker.'));\n          };\n\n          sharedWorker.port.start();\n          sharedWorker.port.postMessage({ dirName });\n        });\n\n        if (result.success) {\n          this.notificationService.success(result.message);\n          this.offlineStatusService.setPendingUploadCount(0);\n        } else {\n          this.notificationService.error(\"Oops! Something went wrong while clearing the offline files.\");\n          console.error(result.message);\n        }\n      }\n    } catch (err) {\n      this.notificationService.error(\"Oops! Something went wrong while clearing the offline files.\");\n      console.error(err.message);\n    }\n  }\n\n  async getCachedFile(fileNo: string) {\n    const opfsRoot = await navigator.storage.getDirectory();\n    try {\n      const dirName = this.getDirectoryName();\n      const filesDir = await opfsRoot.getDirectoryHandle(dirName, { create: false });\n      const fileHandle = await filesDir.getFileHandle(fileNo);\n      return await fileHandle.getFile();\n    } catch (e) {\n      if (e.name === 'NotFoundError') {\n        return null;\n      } else {\n        throw e;\n      }\n    }\n  }\n\n  getDirectoryName = () => {\n    return `files-${this.loggedInUserService.getUserId()}`;\n  }\n\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, OnDestroy, inject } from '@angular/core';\nimport { SharedConstants, User } from '@formbird/types';\nimport {\n  SharedUrlRoutes as SharedUrls,\n  UtilArray,\n  UtilDocumentId as IdGenerator,\n  VersionManager,\n  UtilHttpStatus\n} from '@formbird/shared';\nimport { ClientConstants } from '../../constants/ClientConstants';\nimport { ClientAccessService } from '../access/client-access.service';\nimport { OfflineStatusService } from '../offline-status/offline-status.service';\nimport { LoggedInUserService } from '../user/logged-in-user.service';\nimport { DexieSearchService } from './dexie-search.service';\nimport { IndexedDBConnectorService } from './indexed-dbconnector.service';\nimport { BroadcastService } from '../broadcast/broadcast.service';\nimport { Observable, timeout, Subscription, catchError, from, of, switchMap, throwError } from 'rxjs';\nimport { NotificationService } from '../notification/notification.service';\nimport { FtError } from '@formbird/types';\nimport { KeyValueStorageService } from '../key-value-storage/key-value-storage.service';\nimport { toLower, isEmpty} from 'lodash';\nimport { cloneDeep } from 'es-toolkit';\nimport { DexieWorkerService } from './dexie-worker.service';\nimport { SearchQueue } from './search-queue';\nimport { OpfsCacheService } from '../opfs/opfs-cache.service';\nimport { ConfigService } from '../config/config.service';\nimport * as uuid from 'uuid';\nimport { IndexedDB, IndexedDBConstants } from '@formbird/indexed-db';\nimport { DocumentSessionService } from '../document/document-session.service';\nimport { LocalStorageService } from '../storage/local-storage/local-storage.service';\n\nconst logger = console;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class IndexedDBService extends IndexedDB implements OnDestroy {\n  private http = inject(HttpClient);\n  private indexedDBConnectorService: IndexedDBConnectorService;\n  offlineStatusService: OfflineStatusService;\n  loggedInUserService: LoggedInUserService;\n  private dexieSearchService = inject(DexieSearchService);\n  private clientAccessService = inject(ClientAccessService);\n  private broadcastService = inject(BroadcastService);\n  notificationService: NotificationService;\n  private keyValueStorageService: KeyValueStorageService;\n  private dexieWorkerService = inject(DexieWorkerService);\n  private opfsCacheService = inject(OpfsCacheService);\n  private configService = inject(ConfigService);\n  private documentSessionService = inject(DocumentSessionService);\n  private localStorageService = inject(LocalStorageService);\n\n  user: User;\n  userSub: Subscription;\n  searchQueue = new SearchQueue();\n  subscriptionMap: Map<string, Subscription> = new Map();\n\n  constructor() {\n    const indexedDBConnectorService = inject(IndexedDBConnectorService);\n    const offlineStatusService = inject(OfflineStatusService);\n    const loggedInUserService = inject(LoggedInUserService);\n    const notificationService = inject(NotificationService);\n    const keyValueStorageService = inject(KeyValueStorageService);\n\n    super(indexedDBConnectorService, keyValueStorageService,\n      offlineStatusService, notificationService, loggedInUserService);\n    this.indexedDBConnectorService = indexedDBConnectorService;\n    this.offlineStatusService = offlineStatusService;\n    this.loggedInUserService = loggedInUserService;\n    this.notificationService = notificationService;\n    this.keyValueStorageService = keyValueStorageService;\n\n    this.onDocumentUpdated();\n    this.userSub = this.loggedInUserService.observableUser().subscribe((user: User) => this.user = user);\n\n  }\n\n  public constants = IndexedDBConstants;\n\n  ngOnDestroy() {\n    this.userSub.unsubscribe();\n    this.terminateService();\n  }\n\n  public initialise() {\n    this.dexieWorkerService.initWorker();\n    return this.getDatabase();\n  }\n\n  public terminateService() {\n    return this.indexedDBConnectorService.closeDatabase();\n  }\n\n  public async search(options: any) {\n\n    logger.debug('Doing search documents in indexedDB service.');\n\n    if (options.searchOptions && options.searchOptions.dexieSearchFunction) {\n      return this.dexieSearchService.search(options.searchOptions);\n    } else {\n      const searchId = uuid.v1();\n      const searchKey = `${window.location.href}-${JSON.stringify(options.filter)}`;\n      \n      if (this.subscriptionMap.has(searchKey)) {\n        this.subscriptionMap.get(searchKey).unsubscribe();\n        logger.info(`*** Previous search task cancelled for searchId = ${searchId}\n          ,\\t searchKey: ${searchKey}`);\n      }\n\n      const clientConfig: any = this.configService?.clientConfig();\n      const searchTimeout = clientConfig.offline?.searchTimeout || 20000;\n\n      return new Promise((resolve, reject) => {\n        const searchObservable = this._search(options, searchId).pipe(\n          timeout(searchTimeout),\n          switchMap(result => {\n            this.subscriptionMap.delete(searchKey);\n            return of(result);\n          })\n        );\n\n        const newSubscription = searchObservable.subscribe({\n          next: (result) => {\n            logger.info('*** Search result for searchId ' + searchId + ', result: ', result);\n            resolve(result);\n          },\n          error: (error) => {\n            logger.error('*** Search error for searchId ' + searchId + ', error: ', error);\n            reject(error);\n          },\n          complete: () => {\n            logger.info('*** Search complete for searchId: ' + searchId);\n            this.subscriptionMap.delete(searchKey);\n          }\n        });\n\n        this.subscriptionMap.set(searchKey, newSubscription);\n\n      });\n    }\n  }\n\n  private _search(options: any, searchId: string): Observable<any> {\n\n    const clientConfig: any = this.configService?.clientConfig();\n    Object.assign(options, clientConfig.offlineSearchOptions);\n\n    if (options.filter) {\n      let queryObject: any;\n      if (typeof options.filter === 'string') {\n        queryObject = options.filter.replace(/'/g, '\"');\n        queryObject = typeof queryObject === 'string' ? JSON.parse(queryObject) : queryObject;\n      } else {\n        queryObject = options.filter;\n      }\n      if (queryObject && queryObject.sort) {\n        options.sort = queryObject.sort;\n      }\n\n      if (queryObject && !queryObject?.includeDeleted) {\n        const mustNotDeleted = {\n          term: {\n            \"systemHeader.deleted\": true\n          }\n        };\n        \n        if (!queryObject.query) {\n          queryObject.query = {};\n        }\n        if (!queryObject.query.bool) {\n          queryObject.query.bool = {};\n        }\n\n        if (Array.isArray(queryObject.query.bool.must_not)) {\n          const exists = queryObject.query.bool.must_not.some(\n            (item: any) => JSON.stringify(item) === JSON.stringify(mustNotDeleted)\n          ); // prevent duplicate mustNotDeleted condition\n    \n          if (!exists) {\n            queryObject.query.bool.must_not.push(mustNotDeleted);\n          }\n        } else {\n          queryObject.query.bool.must_not = [mustNotDeleted];\n        }\n        \n      }\n    }\n\n\n    return new Observable<any>(observer => {\n      this.dexieWorkerService.search(\n        this.indexedDBConnectorService.idbName,\n        this.indexedDBConnectorService.currentVersion,\n        this.indexedDBConnectorService.documentIndexes,\n        searchId,\n        options\n      ).subscribe({\n        next: (result) => {\n          console.log(`*** DONE [Search ID: ${searchId}] get data from dexie worker, data = `, result);\n          observer.next(result);\n          observer.complete();\n        },\n        error: (error) => {\n          console.error(`Error [Search ID: ${searchId}] fetching data from dexie worker:`, error);\n          observer.error(error);\n        }\n      });\n    });\n  }\n\n  public insert(bean) {\n\n    logger.debug('Doing insert document in indexedDB service.');\n\n    if (!bean.systemHeader) {\n      bean.systemHeader = {};\n    }\n\n    // set versionId\n    bean.systemHeader.versionId = IdGenerator.generateId();\n\n    // set currentVersion for new document\n    bean.systemHeader.currentVersion = true;\n\n    // set created date for version\n    bean.systemHeader.createdDate = new Date();\n\n    const userId = this.user ? this.user.account.documentId : null;\n    if (userId) {\n      bean.systemHeader.createdBy = userId;\n    }\n\n    if (!bean.systemHeader.documentCreatedDate) {\n      bean.systemHeader.documentCreatedDate = new Date();\n    }\n    if (userId && !bean.systemHeader.documentCreatedBy) {\n      bean.systemHeader.documentCreatedBy = userId;\n    }\n    const options = {\"documentSession\" : this.documentSessionService.getDocumentSession(bean.documentId)};\n    return this.persist(bean, ClientConstants.OPERATION_TYPE_POST, options);\n  }\n\n  public destroy(id) {\n\n    logger.debug('Doing destroy document in indexedDB service.');\n\n    const _self = this;\n\n    return new Promise((resolve, reject) => {\n\n      _self.getDocumentCurrentVersion(id, function(originalRecord) {\n\n        const originalBean = originalRecord;\n\n        // save version as an insert\n        const versionDoc = VersionManager.createVersion(originalBean);\n\n        _self.cacheDocument(versionDoc, true).then(\n          function successFunc(record) {\n\n            const newBean = cloneDeep(originalBean);\n\n            newBean.systemHeader.deleted = true;\n\n            // perform newBean update\n            // Aside from the differences in data between originalBean and newbean, newBean will always\n            // have its previousVersionId = originalBean's versionId. newBean will also be set as the\n            // current version with a new versionId\n            if (newBean.systemHeader.versionId) {\n              newBean.systemHeader.previousVersionId = originalBean.systemHeader.versionId;\n            }\n\n            // update createdBy every time because when we update the doc it's a new version\n            newBean.systemHeader.createdBy = _self.user ?\n              _self.user.account.documentId : null;\n\n            newBean.systemHeader.createdDate = new Date();\n\n            newBean.systemHeader.versionId = IdGenerator.generateId();\n            const options = {\"documentSession\" : _self.documentSessionService.getDocumentSession(newBean.documentId)};\n            _self.persist(newBean, ClientConstants.OPERATION_TYPE_DELETE, options).then(\n              function sucF(rec) {\n                _self.pushDocument(newBean);\n                resolve(rec);\n\n              },\n\n              function errF(error) {\n\n                reject(error);\n\n              }\n            );\n          },\n\n          function errorFunc(err) {\n\n            reject(err);\n\n          }\n        );\n      });\n    });\n\n  }\n\n  public getDocument(id) {\n\n    logger.debug('Doing get document in indexedDB service.');\n\n    const _self = this;\n\n    return new Promise(function(resolve, reject) {\n\n      _self.getDocumentCurrentVersion(id, function(cacheObject) {\n\n        if (cacheObject == null) {\n\n          reject('Document not available in offline database.');\n\n        } else {\n\n          resolve(cacheObject);\n\n        }\n\n      });\n    });\n  }\n\n  public closeDatabase() {\n    this.getDatabase().then(function(db: any) {\n      db.close();\n    },(error) => {\n      logger.error(error);\n    });\n  }\n\n  public backupData(): Promise<any> {\n\n    const _self = this;\n\n    return new Promise((resolve, reject) => {\n      _self.getDatabase().then(function(db) {\n\n        var tblName = IndexedDBConstants.DOCUMENT_TABLE_NAME;\n        db.transaction('rw', db[tblName], (result) => {\n          db[tblName].toArray().then((array) => {\n            resolve(array);\n          }).catch(error => resolve(error));\n        }).catch(e => {\n          logger.error('An error occured while clearing cached documents.');\n          logger.error(e.stack || e);\n          reject(e);\n        });\n      },(error) => {\n        reject(error);\n      });\n    });\n  }\n  public backupDataInChunks(\n    chunkSize: number,\n    processChunk: (chunk: any[]) => void): Promise<void> {\n    return new Promise((resolve, reject) => {\n      this.getDatabase().then((db) => {\n        const tblName = IndexedDBConstants.DOCUMENT_TABLE_NAME;\n\n        db.transaction('rw', db[tblName], async () => {\n          try {\n            let chunk = [];\n            \n            await db[tblName].toCollection().each((record) => {\n              chunk.push(record);\n              if (chunk.length >= chunkSize) {\n                processChunk(chunk); // process download\n                chunk = [];\n              }\n            });\n\n            if (chunk.length > 0) {\n              processChunk(chunk); // process download\n            }\n\n            resolve();\n          } catch (error) {\n            logger.error('An error occurred while processing documents.');\n            logger.error(error.stack || error);\n            reject(error);\n          }\n        }).catch((error) => {\n          logger.error('Transaction failed.');\n          logger.error(error.stack || error);\n          reject(error);\n        });\n      }).catch((error) => {\n        reject(error);\n      });\n    });\n  }\n\n\n  public async clearData(): Promise<any> {\n    try {\n      const db = await this.getDatabase();\n      await db.delete();\n    \n      let userConfig: any = []; \n      userConfig.push({'isRunningCacheClear': false });\n      userConfig.push({'lastSyncDate': 0 });\n      userConfig.push({'idbCurrentVersion': 0 });\n      userConfig.push({'searchIndexes': [] });\n      userConfig.push({'operateOnline': null});\n\n      await this.loggedInUserService.setUserConfigItems(userConfig);\n\n      const keys = ['initialAssetsCachingCompleted', 'initialCacheCompleted', 'initialDataCachingCompleted',\n        'initialMapTilesCachingCompleted','lastSyncComponentCount', 'lastSyncStaticResourceCount', \n        'lastSyncTileServerCacheCount','offlinePendingDocumentsCount'\n      ]\n      await this.loggedInUserService.removeUserConfigItems(keys);\n\n      this.offlineStatusService.setCachingEnabledStatus(false);\n      await this.keyValueStorageService.removeItem('searchIndexes');\n      await this.keyValueStorageService.removeItem('idbCurrentVersion');\n      await this.keyValueStorageService.removeItem('MainOfflinePoller');\n\n      this.offlineStatusService.offlineStatus.errorCacheAttachedFile = [];\n      this.offlineStatusService.offlineStatus.maxCacheAttachedFileCount = 0;\n      this.offlineStatusService.offlineStatus.totalStaticResourceCount = 0;\n\n      await this.offlineStatusService.setOfflineStatusToLocalStorage();\n      return true;\n    } catch (error) {\n      logger.error('An error occured while clearing cached documents.');\n      logger.error(error.stack || error);\n\n      return false;\n    }\n  }\n\n  /**\n   * cache a document\n   * @param document the document\n   * @returns PromiseLike<any> the Promise\n   */\n  public doCacheDocument(document, updateOfflineStatus): Promise<any> {\n\n    const _self = this;\n\n    return new Promise<any>((resolve, reject) => {\n\n      if (!document.documentId) {\n\n        _self.offlineStatusService.ignoreCacheDocument(document);\n\n        const errMsg = \"Document has no documentId \" + JSON.stringify(document);\n        logger.error(errMsg);\n\n        reject(new Error(errMsg));\n\n        return;\n      }\n\n      _self.setIndexedDBIndexes(document);\n\n      _self.cacheDocument(document, false).then(\n        function successFunc(cacheObject) {\n\n          const doc = cacheObject;\n\n          // update the last sync time in local storage with the time of this record if\n          // it is later than the stored value\n          if (updateOfflineStatus !== false) {\n            _self.offlineStatusService.initialCacheQuerySuccess(doc);\n          }\n\n          resolve(doc);\n\n        },\n        function errorFunc(err) {\n          const errorMsg = 'Error caching document: ' + document.documentId + ': ' + err;\n          logger.error(errorMsg);\n\n          if (updateOfflineStatus !== false) {\n            _self.offlineStatusService.ignoreCacheDocument(document);\n          }\n          reject(new Error(errorMsg));\n        }\n      );\n    });\n\n  }\n\n\n\n\n  private loadDocsById(docId, callback) {\n\n    if (docId === undefined || docId === null) {\n      callback(null);\n      return;\n    }\n\n    const tblName = IndexedDBConstants.DOCUMENT_TABLE_NAME;\n    const indexName = IndexedDBConstants.DOCUMENT_INDEX_DOCUMENT_ID;\n    const indexValue = docId;\n\n    this.getEntries(tblName, indexName, indexValue, function(cachedObjects) {\n\n      callback(cachedObjects);\n\n    });\n  }\n\n  /*\n   offlineDetails\n\n   Once offline, if a document has this object under it, it means that it is subject to an operation yet\n   to be submitted to the server.\n\n   This object will have the following attributes {type, status, lastRequestStatus, tries}\n\n   type - From ClientConstants: OPERATION_TYPE_DELETE, OPERATION_TYPE_PUT, OPERATION_TYPE_POST\n   status - IndexedDBConstants: (1)OFFLINE_STATUS_UPLOADED, (2)OFFLINE_STATUS_PENDING,\n   (3)OFFLINE_STATUS_UPLOADING (4)OFFLINE_STATUS_FAILED\n\n   lastRequestStatus - http status of last attempt to upload this operation\n   tries - integer count of the number of times this document's pending operation has been uploaded to the server\n\n   Should not be used to cache documents. Use cacheDocument function instead.\n   Used for saving documents that needs to be sent to and processed by the server.\n\n   */\n  private persist(cacheObject, operation?, options?) {\n\n    const self = this;\n\n    cacheObject.systemHeader.offline = {\n      type: operation,\n      status: IndexedDBConstants.OFFLINE_STATUS_PENDING,\n      lastRequestStatus: '',\n      tries: 0,\n      updates: options ? options.updates : null,\n      isUpdateFromPreviousVersion: options ? options.isUpdateFromPreviousVersion : false,\n      createdDate: new Date(),\n      makeCurrentVersion: options ? options.makeCurrentVersion : false,\n      importPreviousVersion: options ? options.importPreviousVersion : false,\n      patchedVersionId: options?.patchedVersionId,\n      documentSession: options?.documentSession\n    };\n\n    return new Promise((resolve, reject) => {\n\n      self.saveCacheObject(cacheObject, function onCacheObjectSaved(err, cacheObj) {\n\n        if (err) {\n\n          reject(err);\n\n        } else {\n\n          self.offlineStatusService.incPendingDocumentCount();\n          resolve(cacheObj);\n\n        }\n\n      });\n\n    });\n\n  }\n\n  /**\n   * Cache the document in IndexedDB for offline use\n   * @param document - the document to cache\n   */\n  public cacheDocument(document, force) {\n\n    const _self = this;\n\n    return new Promise(function (resolve, reject) {\n      \n      if (!document) {\n        resolve(document);\n        return;\n      }\n\n      _self.setCurrentVersionClient(document);\n      _self.loadDocByVersion(document.systemHeader.versionId, docWithVersionFound);\n\n      function docWithVersionFound(err, cacheObject) {\n        _self.setCurrentVersionClient(cacheObject);\n        // Do not cache the document twice unless forced to (when saving a version document. see jsonPatchUpdate)\n        if (!force && cacheObject != null) {\n          resolve(document);\n          return;\n        }\n\n        _self.saveCacheObject(document, onCacheObjectSaved);\n\n        function onCacheObjectSaved(error, doc) {\n\n          if (error) {\n            reject(error);\n          } else {\n            resolve(doc);\n          }\n\n        }\n      }\n    });\n  }\n\n  /**\n   * cache document received from websocket\n   * @param docInfo - the info used to load full document and changed versions\n   * @param versions - the versions of document\n   * @param updateOfflineStatus - flag indicates that should update offline caching status\n   * @returns Promise\n   */\n  public cachePushedDocument(docInfo, versions, updateOfflineStatus?) {\n\n    const _self = this;\n\n    let currentVersion = null;\n    versions.forEach(function(version) {\n\n      if (version && version.systemHeader && version.systemHeader.currentVersion) {\n        currentVersion = version;\n      }\n\n    });\n\n    function cacheVersion(version) {\n\n      return new Promise((resolve, reject) => {\n        _self.setCurrentVersionClient(version);\n        _self.saveCacheObject(version, function(err, savedVersion) {\n\n          if (err) {\n            reject(err);\n          } else {\n            resolve(savedVersion);\n          }\n        });\n      });\n    }\n\n    function cacheExistingCurrentDoc() {\n\n      // If the currentVersion in indexedDB is before the first prev version in above list so it would not\n      // be set to non-currentVersion. This step set the value to false.\n      _self.getDocumentCurrentVersion(docInfo.documentId, function(doc) {\n\n        if (doc && currentVersion && doc.systemHeader.versionId !== currentVersion.systemHeader.versionId) {\n\n          doc.systemHeader.currentVersion = false;\n          _self.setCurrentVersionClient(doc);\n          _self.saveCacheObject(doc, cacheDone);\n        }\n      });\n    }\n\n    function cacheDone(err, version) {\n      if (err) {\n        logger.error('Caching version error: ' + err);\n      } else {\n        logger.info('Caching version done: ' + version.systemHeader.versionId);\n      }\n    }\n\n    return new Promise(async (resolve, reject) => {\n\n      let hasOfflineAccess = _self.clientAccessService.checkAccess(currentVersion, SharedConstants.OPERATION_TYPE_OFFLINE);\n      if (!hasOfflineAccess && (!currentVersion?.systemHeader?.keyIds || currentVersion?.systemHeader?.keyIds.length < 0)){\n        const existingDoc = await _self.getExistingDocument(docInfo);\n        if(existingDoc){\n          hasOfflineAccess = _self.clientAccessService.checkAccess(existingDoc, SharedConstants.OPERATION_TYPE_OFFLINE);\n        }        \n      }\n     \n      if (hasOfflineAccess) {\n\n        _self.setIndexedDBIndexes(currentVersion);\n\n        if (docInfo.versionIds && docInfo.versionIds.length) { // in case of updating versions from pushed document\n\n          const promises = [];\n          versions.forEach(function(version) {\n            promises.push(cacheVersion(version));\n          });\n\n          Promise.all(promises).then(\n            function ok(versions2) {\n              cacheExistingCurrentDoc();\n\n              if (updateOfflineStatus !== false) {\n                _self.offlineStatusService.initialCacheQuerySuccess(currentVersion);\n              }\n             \n              resolve(versions2);\n            },\n            function fail(error) {\n              const msg = 'Error in caching version of document: ' + docInfo.documentId;\n              logger.error(msg);\n              reject(new Error(msg));\n            }\n          );\n\n        } else {    // in case of updating each current version from websocket reconnect event or browser reloading\n         \n          cacheVersion(currentVersion).then(cacheExistingCurrentDoc).then(function() {\n\n            if (updateOfflineStatus !== false) {\n              _self.offlineStatusService.initialCacheQuerySuccess(currentVersion);\n            }\n            \n            resolve(currentVersion);\n\n          });\n        }\n      } else {\n        resolve(true);\n      }\n    });\n  }\n\n  private getExistingDocument(docInfo){\n    const _self = this;\n    return new Promise((resolve, reject) => {\n      _self.getDocumentCurrentVersion(docInfo.documentId, function(doc) {   \n          resolve(doc)\n        });\n    });    \n  }\n\n\n  private updateOfflineStatusForCachingAttachedFiles(updateOfflineStatus, isMaxCount) {\n    const _self = this;\n\n    if (updateOfflineStatus !== false) {\n      if (isMaxCount){\n        this.offlineStatusService.offlineStatus.maxCacheAttachedFileCount++;\n      } else {\n        this.offlineStatusService.offlineStatus.currentCacheAttachedFileCount++;\n      }\n    }\n  }\n  public async cacheAttachedFilesOffline(document, updateOfflineStatus?) {\n    // Cache file attachments sequence here\n    // Searches for a file attachment in the document\n    // Just visit every array property and if it contains an item with a property\n    // named fileNo then load that file from the server into the cache system\n    return new Promise(async (resolve, reject) => {\n      const properties = Object.keys(document);\n      const promises = [];\n\n      for(let item of properties) {\n        const pValue = document[item];\n        if (pValue instanceof Array) {\n          for(let value of pValue) {\n            const specimen = value;\n              if (specimen && specimen.fileNo && specimen.fileType) { // this is a file attachment by ftUploader\n                try {\n                  this.updateOfflineStatusForCachingAttachedFiles(updateOfflineStatus, true);\n                  await this.loadFileAsync(specimen.fileNo);\n                  this.updateOfflineStatusForCachingAttachedFiles(updateOfflineStatus, false);\n                  promises.push(Promise.resolve(true));\n                } catch (err) {\n                  const msg = 'Error getting file ' + err.status + \" : \" + err.message;\n                  if (err.status !== UtilHttpStatus.NOT_FOUND) {\n                    logger.error(msg);\n                    logger.error(err);\n                  }\n                  this.updateOfflineStatusForCachingAttachedFiles(updateOfflineStatus, false);\n                  this.offlineStatusService.offlineStatus.errorCacheAttachedFile.push(msg);\n                  promises.push(Promise.resolve(true));\n                }\n              } else {\n                promises.push(Promise.resolve(true));\n              }\n\n          }\n        }\n      }\n      resolve(await Promise.all(promises));\n    });\n  }\n\n  public toBase64Str(blob) {\n    return new Promise((resolve, reject) => {\n\n      const reader = new FileReader();\n\n      reader.onloadend = function() {\n        resolve(reader.result);\n      };\n\n      reader.onerror = function() {\n        reject('Error converting to base64str blob.');\n      };\n\n      reader.readAsDataURL(blob);\n    });\n  }\n\n  // caches file blob into indexeddb\n  public loadFileAsync(fileNo) {\n\n    const _self = this;\n\n    return new Promise((resolve, reject) => {\n\n      const url = SharedUrls.serverRoutes.loadFile + '/' + fileNo;\n\n      _self.http.get(url, {responseType: 'blob'}).toPromise().then(\n        async response => {\n          const data = response;\n          const fileType = data.type;\n\n          if (data) {\n\n            const offlineFileRecord = {\n              fileNo: fileNo,\n              status: IndexedDBConstants.OFFLINE_STATUS_UPLOADED,\n              mimeDetailsObj: { contentType: fileType }\n            };\n\n            await _self.opfsCacheService.cacheFile({\n              fileNo: fileNo,\n            }, data)\n            await _self.saveFile(offlineFileRecord);\n\n            resolve(true)\n\n          } else {\n            logger.warn('No data from remote file.');\n            resolve(true);\n          }\n\n        }).catch(err => {\n          reject(err);\n        });\n    });\n\n  }\n\n\n  public async saveCacheObject(offlineCacheObject, callback) {\n\n    const _self = this;\n    const tbl = IndexedDBConstants.DOCUMENT_TABLE_NAME;\n\n    // versionId is the primary key, hence, redundancy is avoided in cache see IndexedDBConnectorService\n    try {\n\n      await _self.saveFlattendValues(offlineCacheObject);\n\n      //20651#c97170 : disableSave not heeded when saving document offline\n      const document = await _self.removeDisableSaveFieldValues(offlineCacheObject);\n\n      _self.setCurrentVersionClient(document);\n\n      this.saveEntry(tbl, document, function (err) {\n\n        if (!err) {\n          _self.broadcastService.broadcast(ClientConstants.CHECK_UNSYNCED_DOCUMENTS, offlineCacheObject);\n          callback(null, offlineCacheObject);\n        } else {\n          callback(err);\n        }\n      });\n\n      // if there are blobs, then save them into cache too\n      if (offlineCacheObject && offlineCacheObject.systemHeader && !offlineCacheObject.systemHeader.offline) {\n        this.cacheAttachedFilesOffline(offlineCacheObject);\n      }\n\n    } catch (e) {\n      callback(e);\n    }      \n\n  }\n\n  private onDocumentUpdated() {\n    this.broadcastService.on(ClientConstants.DOCUMENT_UPDATED).subscribe(data => {\n      if (data) {\n        const record = data[0];\n        if (record && record.systemHeader && record.systemHeader.systemType === SharedConstants.SYSTEM_TYPE_OFFLINE_INDEX) {\n          const previous = this.loggedInUserService.getUserConfigItem('searchIndexes');\n          const indexes = record.indexedDBIndexes || [];\n          const needtoUpgraded = previous.some(indexName => !indexes.includes(indexName))\n            || indexes.some(indexName => !previous.includes(indexName));\n          if (needtoUpgraded) {\n            this.indexedDBConnectorService.upgradeOfflineDatabase(indexes);\n          }\n        }\n      }\n    });\n  }\n\n  async jsonPatchUpdate(newBean, originalBean, options) {\n\n    logger.debug('Doing update document in indexedDB service.');\n\n    // Use the doc saved in indexeddb because original bean has been mutated\n    // to not have offlineDetails. See https://mantis.formbird.com/view.php?id=14351\n    const orig: any = await this.loadDocByVersion(originalBean.systemHeader.versionId);\n    \n    // check if the original version is a failed post version (failed insert) from the previous synching\n    let isFailedPostVersion = orig?.systemHeader?.offline?.type === ClientConstants.OPERATION_TYPE_POST &&\n      orig?.systemHeader?.offline?.status === IndexedDBConstants.OFFLINE_STATUS_FAILED;\n    \n    let versionDoc = VersionManager.createVersion(orig);\n    await this.cacheDocument(versionDoc, true);\n\n    // perform newBean update\n    // Aside from the differences in data between originalBean and newbean, newBean will always have\n    // its previousVersionId = originalBean's versionId. newBean will also be set as the current version\n    // with a new versionId\n\n    // if versionId not yet generated\n    if (newBean.systemHeader.versionId === versionDoc.systemHeader.versionId) {\n      newBean.systemHeader.versionId = IdGenerator.generateId();\n    }\n    // update createdBy every time because when we update the doc it's a new version\n    newBean.systemHeader.createdBy = this.user ? this.user.account.documentId : null;\n\n    newBean.systemHeader.createdDate = new Date();\n\n    if (!options) {\n      options = {};\n    }\n    if (!options.documentSession) {\n      options.documentSession = this.documentSessionService.getDocumentSession(newBean.documentId);\n    }\n\n    // if the previous version is a failed post one,\n    // the incoming version should be insert mode and has no previousVersionId, updates\n    let type;\n    if (isFailedPostVersion) {\n\n      delete options.isUpdateFromPreviousVersion;\n      delete options.patchedVersionId;\n      delete options.updates;\n\n      // the version should be insert instead of update\n      type = ClientConstants.OPERATION_TYPE_POST;\n\n    } else {\n\n      type = ClientConstants.OPERATION_TYPE_PUT;\n      newBean.systemHeader.previousVersionId = versionDoc.systemHeader.versionId;\n    }\n\n    const savedDocument: any = await this.persist(newBean, type, options);\n\n    this.pushDocument(savedDocument);\n    return savedDocument;\n\n  }\n\n  private pushDocument(savedDocument) {\n    const filterDoc = { \n      versionId : savedDocument.systemHeader.versionId,\n      documentId : savedDocument.documentId\n    };     \n    this.localStorageService.setItem(SharedConstants.WEB_SOCKET_MESSAGE_SAVE_DOCUMENT, JSON.stringify(filterDoc));\n  }\n\n  public deepDiffUpdate(newBean, originalBean, options) {\n    return this.jsonPatchUpdate(newBean, originalBean, options);\n  }\n\n  public executeComponentFunction(options) {\n\n    logger.info('Executing component function in indexed-db Service');\n\n    const _self = this;\n\n    return new Promise((resolve, reject) => {\n\n      this.indexedDBConnectorService.getDatabase().then(function(db) {\n        try {\n          db.documents.where('systemHeader.systemType').equals(SharedConstants.SYSTEM_TYPE_QUERY).toArray( async function(documents) {\n            let queryDocument;\n            const results = await documents.filter( function(document) {\n              return document.name === options.offlineComponentLibraryName && document.systemHeader.currentVersion === true &&\n                toLower(document.searchProvider) === 'dexie';\n            });\n\n            if (results && results.length > 0) {\n              queryDocument = results[0];\n              if (queryDocument && !isEmpty(queryDocument.filter)) {\n                try {\n                  const fun = new Function(queryDocument.filter);\n                  fun(db, function(err, data) {\n\n                    if (err) {\n\n                      const message = 'Error in Dexie: ' + err;\n                      reject(new Error(message));\n\n                    } else {\n                      resolve(data);\n                    }\n                  });\n                } catch (err) {\n                  reject(err);\n                }\n\n              }\n\n            } else {\n              reject(new Error(\"Offline component Library document not found.\"));\n            }\n\n\n          });\n        } catch (err) {\n          reject(err);\n        }\n      },(error) => {\n        reject(error);\n      });\n    });\n  }\n\n  async getTemplateAndDocument(id: string, templateId, callBack) {\n\n    logger.debug('Doing get template and document in indexedDB service.');\n\n    const _self = this;\n\n    _self.getDocumentCurrentVersion(id, function(document) {\n      let template;\n      if (!templateId && document && document.systemHeader &&\n        document.systemHeader.systemType === SharedConstants.SYSTEM_TYPE_TEMPLATE\n      ) {\n        template = document;\n        document = null;\n      }\n\n      if (document) {\n        const tplId = templateId || document.systemHeader.templateId;\n        if (tplId) {\n          _self.getDocumentCurrentVersion(tplId, function(template) {\n\n            if (template == null) {\n              const error = new FtError(`Template for document not found: ${tplId}`);\n              callBack(error, null);\n            } else {\n              callBack(null, {template, document, templateReturnStatus: UtilHttpStatus.OK} );\n            }\n          });\n        }\n      } else if (template) {\n        callBack(null, {template, document, templateReturnStatus: UtilHttpStatus.OK });\n      }\n      else {\n        const error = new FtError(`Template or document: ${id} not found`);\n        callBack(error, null);\n      }\n\n    });\n\n  }\n\n  async loadComponentDoc(componentName) {\n\n    const _self = this;\n\n    const tbl = IndexedDBConstants.DOCUMENT_TABLE_NAME;\n    const index = IndexedDBConstants.DOCUMENT_INDEX_NAME;\n\n    return new Promise((resolve, reject) => {\n      _self.getEntries(tbl, index, componentName, async (documents) => {\n        \n        for (let doc of documents) {\n          if (doc?.systemHeader?.systemType === 'component' && componentName && doc?.systemHeader?.currentVersion) {\n            resolve(doc);\n            return;\n          }\n        }\n\n        const error = new FtError(`Component: ${componentName} not found`);\n        reject(error);\n      });\n    });\n  }\n\n  private removeDisableSaveFieldValues = function(document) {\n\n    return new Promise((resolve, reject) => {\n      const newBean = cloneDeep(document);\n      const tplId = newBean.systemHeader?.templateId;\n      if (tplId && [\"POST\", \"PUT\"].includes(newBean.systemHeader?.offline?.type)) {\n        this.getDocumentCurrentVersion(tplId, function(template) {\n          if (template && template.components && template.components.length > 0) {\n            for (let t = 0, len = template.components.length; t < len; t++) {\n              const fld = template.components[t];\n              if (fld.disableSave === true) {\n                delete newBean[fld.name];\n              }\n            }\n          }\n          resolve(newBean)\n        });\n      } else {\n        resolve(document);\n      }   \n    });  \n  };\n\n\n}\n","// type of message sent from a web worker to the main thread\nexport enum WebWorkerMessageType {\n  ADD_TO_MAX_CACHE_COUNT,\n  ADD_TO_CURRENT_CACHE_COUNT,\n  SET_PAGE_DOWNLOAD_PROGRESS,\n  SET_INITIAL_CACHE_QUERY_SUCCESS,\n  INITIAL_CACHE_COMPLETED,\n  SET_LAST_SYNC_START_TIME,\n  PEINDING_DOCUMENT_COUNT,\n  PREVIOUS_SYNC_STATUS,\n  PRINT_MESSAGE,\n  MESSAGE_RECEIVED,\n  GATEWAY_ERROR,\n  FATAL_ERROR,\n  PENDING_UPLOAD_COUNT\n}\n\n// a message sent between a web worker and the main thread using postMessage\nexport interface OfflineWebWorkerMessage {\n  messageType: WebWorkerMessageType;\n  value: any;\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { IndexedDBConstants } from '@formbird/indexed-db';\nimport {\n  SharedUrlRoutes,\n  UtilError,\n  UtilHttpStatus,\n  UtilType\n} from '@formbird/shared';\nimport { FtError, SharedConstants } from '@formbird/types';\nimport { lastValueFrom } from 'rxjs';\nimport { ConfigService } from '../config/config.service';\nimport { DocumentSessionService } from '../document/document-session.service';\nimport { IndexedDBService } from '../indexeddb/indexed-db.service';\nimport { NotificationService } from '../notification/notification.service';\nimport { OfflineStatusService } from '../offline-status/offline-status.service';\nimport { WebWorkerMessageType } from '../offline/offline-web-worker-message.type';\nimport { OfflineWebWorkerOptions } from '../offline/offline-web-worker-options.type';\nimport { LoggedInUserService } from '../user/logged-in-user.service';\nimport { WorkerService } from '../worker/workers.service';\n\nconst serverRoutes = SharedUrlRoutes.serverRoutes;\n\nconst logger = console;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class RestDataService {\n  private http = inject(HttpClient);\n  private loggedInUserService = inject(LoggedInUserService);\n  private offlineStatusService = inject(OfflineStatusService);\n  private indexedDBService = inject(IndexedDBService);\n  private documentSessionService = inject(DocumentSessionService);\n  private configService = inject(ConfigService);\n  private workerService = inject(WorkerService);\n  private notificationService = inject(NotificationService);\n\n  public async checkDocumentExists(url, id, includeDeleted?) {\n\n    logger.debug('Doing check document exists in rest service.');\n\n    try {\n      let fullUrl = url;\n      if (id) {\n        fullUrl += '/' + id;\n      }\n\n      if (includeDeleted === true) {\n        fullUrl += '/' + includeDeleted;\n      }\n\n      return await this.http.get(fullUrl).toPromise();\n    } catch (err) {\n      const msg = err ? err.message : 'Something went wrong when checking document exists.';\n      const error = new FtError(msg);\n      if (err) {\n        error.status = err.status;\n        error.statusText = err.statusText;\n        error.message = err.message;\n      }\n\n      throw error;\n    }\n  }\n\n  getTemplateAndDocument = async (id: string, templateId?: string): Promise<any> => {\n\n    logger.debug('Doing get template and document in rest service.');\n\n    try {\n      let url = SharedUrlRoutes.serverRoutes.templateAndDocument + '/' + id;\n      if (templateId) {\n        url = url + '/' + templateId;\n      }\n\n      return await this.http.get(url).toPromise();\n    } catch (err) {\n      if (err?.status === 503) {\n       throw err;\n      }else {\n        const msg = err ? err.message : 'Something went wrong when getting template and document.';\n        const error = new FtError(msg);\n\n        if (err) {\n          error.status = err.status;\n          error.statusText = err.statusText;\n          error.message = err.error;\n\n          if (err.status === UtilHttpStatus.SERVER_UNRESPONSIVE) {\n            error.message = 'Network connection lost. Could not retrieve.';\n          }\n        }\n\n        throw error;\n      }\n    }\n  }\n\n  public getDocumentObservable(id, expectedDocumentType?) {\n    let fullUrl = serverRoutes.document + '/' + id;\n    if (expectedDocumentType) {\n      fullUrl += \"?expectedDocumentType=\" + expectedDocumentType\n    }\n    return this.http.get(fullUrl);\n  }\n\n  public async getDocument(id, expectedDocumentType?) {\n\n    logger.debug('Doing get document in rest service.');\n\n    try {\n      return await this.getDocumentObservable(id, expectedDocumentType).toPromise();\n    } catch (err) {\n      let msg = err ? err.message : 'Something went wrong when getting document.';\n      if (err.error instanceof ProgressEvent) {\n        msg = 'Network Error.'\n      }\n\n      const error = new FtError(msg);\n\n      if (err && err.status) {\n        error.status = err.status;\n        error.statusText = err.statusText;\n        error.message = err.error;\n      }\n\n      throw error;\n    }\n  }\n\n  public terminateDataCaching() {\n    this.workerService.terminateWorker('offline');\n    this.offlineStatusService.setCacheLoadingStatus(false);\n    this.offlineStatusService.setPendingDocumentCount(0);\n    this.offlineStatusService.setMaxCacheCount(0);\n    this.offlineStatusService.checkCurrentCacheCount();\n  }\n\n  public workerLoadDataCache(syncStartTime, isInitialize?) {\n    const _self = this;\n    return new Promise(async (resolve, reject) => {\n\n      let syncWorker: any;\n      const maxTries = 5;\n      let currentPostTries = 0;\n      let receivedMsgFromWorker = false;\n      let postInterval;\n\n      if (syncStartTime === undefined) {\n        console.log('sync start time is undefined. Set to 0');\n        syncStartTime = 0;\n      }\n      const cachingEndDate = _self.loggedInUserService.getUserConfigItem('cachingEnableDate');\n\n      const workerOptions: OfflineWebWorkerOptions = {\n        syncStartTime,\n        syncPageSize: 0,\n        currentCacheCount: 0,\n        isInitialize: !!isInitialize,\n        cachingEnableDate: cachingEndDate > 0 ? cachingEndDate : (new Date().valueOf())\n      };\n\n      if (!isInitialize) {\n        _self.offlineStatusService.offlineStatus.currentCacheCount = 0;\n        _self.loggedInUserService.setUserConfigItem('currentCacheCount', 0);\n      }\n\n      const offlineUserConfig: any = _self.configService.clientConfig().offline;\n      workerOptions.syncPageSize = offlineUserConfig?.syncPageSize || 10000;\n      workerOptions.currentCacheCount = _self.loggedInUserService.getUserConfigItem('currentCacheCount') || 0;\n\n      const setupWorker = () => {\n\n        // create the sync worker\n        syncWorker = new Worker('./assets/offline-sync-rs.worker.js', { type: 'module' });\n        this.workerService.addWorker('offline', syncWorker);\n\n        syncWorker.onmessage = onMessage;\n\n        // post the message to the sync worker\n        syncWorker.postMessage(workerOptions);\n\n      };\n\n      setupWorker();\n\n      const terminateWorker = () => {        \n        syncWorker.postMessage({ type: 'closedb' });\n        this.workerService.terminateWorker('offline');\n        syncWorker = undefined;\n      };\n\n      window.addEventListener('beforeunload', () => {\n\n        terminateWorker();\n\n      });\n\n      setTimeout(() => {\n\n        if (!_self.offlineStatusService.isCachingEnabled()) {\n          terminateWorker();\n          reject(\"Error on caching and terminating initial documents sync.\");\n        }\n\n        if (!receivedMsgFromWorker) {\n\n          console.debug('Sync worker not receive a synced message. Retry...');\n\n          currentPostTries = maxTries;\n\n          retryPostingSyncMessage();\n\n        }\n      }, 5000);\n\n      function onMessage({ data }) {\n\n        logger.log(`page got message: ${WebWorkerMessageType[data?.messageType]}`);\n\n        if (data?.messageType === WebWorkerMessageType.MESSAGE_RECEIVED) {\n          // Now worker works as expected: the message posted to the sync worker and it responses\n          _self.offlineStatusService.offlineStatus.cachingDocEnableDate = data?.cachingDocEnableDate;\n          receivedMsgFromWorker = true;\n          clearInterval(postInterval);\n        }\n\n        if (!_self.offlineStatusService.isCachingEnabled()) {\n          terminateWorker();\n          reject(\"Error on caching and terminating initial documents sync.\");\n        }\n\n        if (data?.messageType === WebWorkerMessageType.ADD_TO_MAX_CACHE_COUNT) {\n          // count is sent in data.value by OfflineStatusWebWorkerService\n          _self.offlineStatusService.setMaxCacheCount(data.value);\n        }\n\n        if (data?.messageType === WebWorkerMessageType.ADD_TO_CURRENT_CACHE_COUNT) {\n          _self.offlineStatusService.offlineStatus.currentCacheCount += (data.value);\n          _self.loggedInUserService.setUserConfigItem('currentCacheCount', _self.offlineStatusService.offlineStatus.currentCacheCount);\n        }\n\n        if (data?.messageType === WebWorkerMessageType.SET_PAGE_DOWNLOAD_PROGRESS) {\n          if (data.value && data.value.loaded) {\n            _self.offlineStatusService.pageDownloadProgress.loaded = data.value.loaded;\n          }\n          if (data.value && data.value.total) {\n            _self.offlineStatusService.pageDownloadProgress.total = data.value.total;\n          }\n          if (data.value && data.value.pageNumber) {\n            _self.offlineStatusService.pageDownloadProgress.pageNumber = data.value.pageNumber;\n          }\n        }\n\n        if (data?.messageType === WebWorkerMessageType.SET_INITIAL_CACHE_QUERY_SUCCESS) {\n          _self.offlineStatusService.initialCacheQuerySuccess(data.value);\n        }\n\n        if (data?.messageType === WebWorkerMessageType.SET_LAST_SYNC_START_TIME) {\n          _self.offlineStatusService.setLastSyncDate(data.value);\n        }\n\n        if (data?.messageType === WebWorkerMessageType.INITIAL_CACHE_COMPLETED) {\n          _self.loggedInUserService.setUserConfigItem('cachingEnableDate', 0);\n          _self.offlineStatusService.offlineStatus.cachingDocEnableDate = 0;\n          _self.offlineStatusService.checkCurrentCacheCount();\n          if (data.value.error) {\n            reject(data.value.error);\n          } else {\n            resolve(data.value.result);\n          }\n\n          terminateWorker();\n        }\n\n        if (data?.messageType === \"STORAGE_ACCESS_ISSUE\") {\n          logger.warn(data.value);\n          //_self.notificationService.printMessage(data.value, 'error', null, { x: 'right', y: 'top' });\n        }\n      }\n\n      function retryPostingSyncMessage() {\n\n        postInterval = setInterval(() => {\n\n          if (!receivedMsgFromWorker) {\n\n            if (currentPostTries === maxTries) {\n\n              // terminate the current sync worker\n              terminateWorker();\n\n              // setup a new one\n              setupWorker();\n\n              currentPostTries = 1;\n\n            } else {\n\n              // post the message to the sync worker\n              syncWorker.postMessage(workerOptions);\n\n              currentPostTries++;\n\n            }\n\n          }\n\n        }, 3000);\n\n      }\n\n    });\n  }\n\n  private processCachingDocuments(documents, isInitialize?, updateOfflineStatus?) {\n\n    const _self = this;\n\n    return new Promise((resolve, reject) => {\n\n      const promises = [];\n      if (isInitialize === true) {\n        promises.push(_self.indexedDBService.doCacheBulkDocuments(documents, updateOfflineStatus));\n\n      } else {\n        for (let i = 0; i < documents.length; i++) {\n\n          const document = documents[i];\n          if (isInitialize === false) {\n            promises.push(_self.indexedDBService.cachePushedDocument(document, [document], updateOfflineStatus));\n          } else {\n            promises.push(_self.indexedDBService.doCacheDocument(document, updateOfflineStatus));\n          }\n        }\n\n      }\n\n      Promise.all(promises).then(\n        function successFunction(results) {\n          resolve(results);\n        },\n        function errorFunction(err) {\n          _self.indexedDBService.checkQuotaExceededError(err);\n          reject(new Error(err.message));\n        }\n      );\n\n    });\n  }\n\n  public async getIndexedDBIndexes(): Promise<string[]> {\n    const options = {\n      filter: {\n        query: {\n          bool: {\n            must: [\n              {\n                term: {\n                  'systemHeader.systemType': SharedConstants.SYSTEM_TYPE_OFFLINE_INDEX\n                }\n              }\n            ]\n          }\n        }\n      },\n      sourceFilter: 'indexedDBIndexes'\n    };\n\n    const results: any = await this.search(options);\n    const hits = results.data?.hits?.hits;\n\n    if (hits && hits.length > 0) {\n      if (hits.length > 1) {\n        throw new Error('There can only be one offline index document per user.');\n      }\n\n      const offlineIndexDoc = hits[0]._source;\n      return offlineIndexDoc.indexedDBIndexes;\n    }\n\n    return [...IndexedDBConstants.DOCUMENT_INDEXES];\n  }\n\n  // get full rest url from a url without the host and webapp section, so a url of 'cases' will become\n  // {hostname}:{port}/{webappname}/cases. eg localhost:8090/focus-rest/cases\n  private getFullRestURL(url, id?) {\n    let fullUrl = url;\n\n    if (UtilType.hasValue(id)) {\n      fullUrl += '/' + id;\n    }\n\n    return fullUrl;\n  }\n\n  /**\n   * As per 10539, we send the new document directly to the server and let it run jsonPatch.\n   * For simplicity, other parameters from the old deep Update was\n   * removed because the server can resolve them with just the newDocument value.\n   *\n   * @param newDocument the new document to update\n   * @returns promise|*|jQuery.promise the promise\n   */\n  public async jsonPatchUpdate(newDocument, options) {\n\n    logger.debug('Doing update document in rest service.');\n\n    const throwError = (err) => {\n      console.log(err);\n      let errorMessage = err.error || 'Something went wrong when updating document.'\n      if (err.error instanceof ProgressEvent) {\n        errorMessage = 'Could not save due to lost network connection in save.'\n      }\n\n      throw new Error(errorMessage);\n    };\n\n    const updateUrl = SharedUrlRoutes.serverRoutes.documentDeepDiffUpdate + '/' + newDocument.documentId;\n\n    try {\n\n      let body;\n\n      if (options.updates?.updates?.length > 0) {\n\n        // only send updates if defined\n        body = this.setupRequestBody(null, options);\n\n      } else {\n        body = this.setupRequestBody(newDocument, options);\n      }\n\n      return await this.http.put(updateUrl, body).toPromise();\n\n    } catch (err) {\n      if (err && err.status === 422) {  // Retry with updated body\n\n        try {\n\n          let body = this.setupRequestBody(newDocument, options);\n\n          return await this.http.put(updateUrl, body).toPromise();\n\n        } catch (err) {\n          throwError(err);\n        }\n      \n      } else if(err && err.status === 503) {\n        throw err;\n      } else {\n        throwError(err);\n      }\n    }\n  }\n\n  /*\n   insert function\n   parameters:\n   bean - the bean to insert\n   url - the url for the restful web service. This will also be used as a key in the database\n   successFunction - a function to execute on success to do post save steps\n   cachingRequired - whether to save the record to the local database. Records that never need\n   to be loaded in the app on their own, such as events, can have this set to false\n   */\n  public async insert(bean, url) {\n\n    logger.debug('Doing insert document in rest service.');\n\n    try {\n      const fullUrl = this.getFullRestURL(url, bean.id);\n      const body = this.setupRequestBody(bean);\n\n      return await this.http.post(fullUrl, body).toPromise();\n    } catch (err) {\n      let errorMessage = err.error || 'Something went wrong when inserting document.'\n      if (err.error instanceof ProgressEvent) {\n        errorMessage = 'Could not save due to lost network connection in save.'\n      }\n\n      if (err && err.status === 503) {\n        throw err;\n      } else {\n        throw new Error(errorMessage);\n      }\n      \n    }\n  }\n\n  private setupRequestBody(document, options?) {\n    if (!options) {\n      options = {};\n    }\n    if (!options.documentSession) {\n      options.documentSession = this.documentSessionService.getDocumentSession(document.documentId);\n    }\n\n    return {\n      document,\n      options\n    };\n  }\n\n  /*\n   destroy function\n   parameters:\n   id - the id of the bean to delete\n   url - the url for the restful web service\n   cachingRequired - whether to save the record to the local database. Records that never need\n   templateId - template used when deleting document\n   versionId - version of document during deletion\n   to be loaded in the app on their own, such as events, can have this set to false\n   */\n  public async destroy(id, url, cachingRequired, templateId, previousVersionId) {\n\n    logger.debug('Doing destroy document in rest service.');\n\n    try {\n      const fullUrl = this.getFullRestURL(url, id) + '/' + templateId + '/' + previousVersionId;\n\n      const data = {\n        body: this.setupRequestBody({ documentId: id })\n      }\n\n      return await this.http.delete(fullUrl, data).toPromise();\n    } catch (err) {\n      console.log(err);\n      if (err && err.status === 503) {\n        throw err;\n      } else {\n        const error = err ? new Error(err.error) : new Error('Something went wrong when destroying document.');\n        throw error;\n      }\n     \n    }\n  }\n\n  public async generatePit() {\n    return await lastValueFrom(this.http.get('api/generatePit'));\n  }\n\n  public async aggregate(query) {\n    try {\n      return await this.http.post(serverRoutes.aggregate, { query }, {\n        headers: { 'Content-Type': 'application/json' }\n      }).toPromise();\n    } catch (err) {\n      throw new Error('Error on aggregate: ' + err.error || err);\n    }\n  }\n\n  public async search(options) {\n\n    logger.debug('Doing search documents in rest service.');\n\n    try {\n      return await this.http.post('api/documentSearch', options, {\n        headers: { 'Content-Type': 'application/json' }\n      }).toPromise();\n    } catch (err) {\n      let msg;\n      if (err && err.error) {\n        msg = err.error || err.message;\n      } else {\n        msg = 'Something went wrong when searching document. Status: ' + err.status;\n      }\n\n      if (err && err.status === UtilHttpStatus.SERVER_UNRESPONSIVE) {\n        throw UtilError.createError(msg, UtilError.SERVER_UNRESPONSE_ERROR);\n      } else {\n        throw new Error(msg);\n      }\n    }\n  }\n\n  public async loadVersions(versionIds): Promise<any> {\n    if (!versionIds || !versionIds.length) {\n      return null;\n    }\n\n    try {\n      const url = SharedUrlRoutes.serverRoutes.versionFetch;\n      const options = {\n        versionIds: versionIds,\n        'includeAllVersions': true\n      };\n\n      return await this.http.post(url, options).toPromise();\n    } catch (err) {\n      const msg = 'Error requesting versions. Status: ' + err.status;\n      logger.error(err.message);\n      throw new Error(msg);\n    }\n  }\n\n  /*\n   undestroy function\n   parameters:\n   id - the id of the bean to undelete\n   url - the url for the restful web service\n   */\n  public async undestroy(id, url) {\n    const fullUrl = this.getFullRestURL(url, id);\n    try {\n      return await this.http.put(fullUrl, null).toPromise();\n    } catch (err) {\n      const error = err ? new Error(err.error) : new Error('Something went wrong when undestroying document.');\n      throw error;\n    }\n  }\n\n  /*\n  bulkUploadDocuments function\n  parameters:\n  documents - the array of documents to upload.\n  url - the url for the restful web service\n  */\n  public async bulkUploadDocuments(documents, url) {\n    try {\n      const fullUrl = this.getFullRestURL(url);\n      return await this.http.post(fullUrl, documents).toPromise();\n    } catch (err) {\n      const error = err ? new Error(err) : new Error('Something went wrong when uploading documents.');\n      throw error;\n    }\n  }\n\n\n  public async executeComponentFunction(options) {\n    try {\n      return await this.http.post('api/execute', options,\n        { headers: { 'Content-Type': 'application/json' } }).toPromise();\n    } catch (err) {\n      let msg;\n      logger.error(err);\n      if (err && err.error) {\n        msg = err.error;\n      } else if (err && err.message) {\n        msg = 'executing component function failed with error: ';\n        msg += err.message;\n      } else {\n        msg = 'Something went wrong when executing component function. Status: ' + err.status;\n      }\n\n      if (err && err.status === UtilHttpStatus.SERVER_UNRESPONSIVE) {\n        throw UtilError.createError(msg, UtilError.SERVER_UNRESPONSE_ERROR);\n      } else {\n        throw new Error(msg);\n      }\n    }\n  }\n\n  async loadComponentDoc(componentName) {\n    const url = 'api/loadComponentDoc/' + componentName;\n\n    try {\n      const result = await lastValueFrom(this.http.get(url));\n      if (result === 404) {\n        throw new Error(`Component ${componentName} not found.`);\n      }\n\n      return result;\n    } catch (err) {\n      throw new Error(err.message || 'Something went wrong when getting custom component document.');\n    }\n  }\n\n  loadFile(fileNo: string) {\n    const resp = this.http.get(`${serverRoutes.loadFile}/${fileNo}`, { responseType: 'blob' });\n    return lastValueFrom(resp)\n  }\n\n}\n","import { Injectable, inject } from '@angular/core';\nimport { cloneDeep } from 'es-toolkit';\n\nimport {\n  DocumentUpdater,\n  SharedUrlRoutes,\n  UtilDocument,\n  UtilDocumentId,\n  UtilError,\n  UtilHttpStatus,\n  UtilType\n} from '@formbird/shared';\nimport * as Handlebars from 'handlebars';\n\nimport { LoggedInUserService } from '../user/logged-in-user.service';\nimport { IndexedDBConnectorService } from '../indexeddb/indexed-dbconnector.service';\nimport { UtilService } from '../../utils/UtilService';\nimport { RestDataService } from './rest-data.service';\nimport { OfflineStatusService } from '../offline-status/offline-status.service';\nimport { IndexedDBService } from '../indexeddb/indexed-db.service';\nimport { ClientAccessService } from '../access/client-access.service';\nimport { Observable } from 'rxjs';\nimport { User, SharedConstants, FileReferenceDetails, FileReferenceDocument } from '@formbird/types';\nimport { select } from '../../redux/decorators/select';\nimport { DocumentSessionService } from '../document/document-session.service';\nimport { IndexedDBConstants } from '@formbird/indexed-db';\nimport { OpfsCacheService } from '../opfs/opfs-cache.service';\nimport { ConfigService } from '../config/config.service';\n\nconst serverRoutes = SharedUrlRoutes.serverRoutes;\n\nconst logger = console;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DataService {\n  private configService = inject(ConfigService);\n  private indexedDBConnectorService = inject(IndexedDBConnectorService);\n  private loggedInUserService = inject(LoggedInUserService);\n  private restDataService = inject(RestDataService);\n  private offlineStatusService = inject(OfflineStatusService);\n  private indexedDBService = inject(IndexedDBService);\n  private clientAccessService = inject(ClientAccessService);\n  private documentSessionService = inject(DocumentSessionService);\n  private opfsCacheService = inject(OpfsCacheService);\n\n  // the preferred service will be called before the secondary service. So if caching is enabled the preferred service will be\n  // the IndexedDBService. If caching is not enabled the preferred service will be the rest data service\n  preferredService: any;\n  secondaryService: any;\n\n  @select(['userState', 'user']) user$: Observable<User>;\n  user: User;\n  isRunningPreviousSync: boolean;\n\n  constructor() {\n    if (this.user$){\n      this.user$.subscribe((data: User) => this.user = data);\n    }\n  }\n\n  //\n  // // the preferred service. This can be configured to either check the cache for data first or go to the\n  // // network first. The service to call first will be set based on the ConfigService.clientConfig.preferCachedData value\n  // var preferredService = null;\n  //\n  // // the secondaryService will be tried if the preferred service fails\n  // var secondaryService = null;\n\n  ////////////////////////////////////////\n  // local service functions\n\n  /**\n   * cache a document for offline use\n   * @param docInfo - the document used to load full document to cache\n   * @param versions - the versions used to cache\n   */\n  async cacheDocument(docInfo, versions): Promise<any> {\n\n    const _self = this;\n\n    if (_self.offlineStatusService.isCachingEnabled()) {\n      try{      \n        if (!versions || !versions.length) {      \n          return _self.restDataService.loadVersions(docInfo.versionIds).then(\n            (versions) => {\n\n              return _self.indexedDBService.cachePushedDocument(docInfo, versions);\n\n            },\n            (error) => {\n\n              return Promise.reject(error);\n\n            }\n          );\n        }\n       \n        await _self.indexedDBService.cachePushedDocument(docInfo, versions);\n       \n\n        //mantis #20381: Remove non-current versions from indexedDB\n        await _self.indexedDBService.removeNonCurrentVersion(versions);  \n        \n       \n        //mantis.formbird.com/view.php?id=19503#c91943  revokes access on a document that is already cached\n        await _self.indexedDBService.removeNonKeyIds(versions);  \n      }catch (err){        \n        return Promise.reject(err);\n      }\n    }\n\n    return Promise.resolve(versions);\n  }\n\n  async documentExists(documentId: string, includeDeleted?: boolean): Promise<any> {\n\n    if (!documentId) {\n      throw new Error('No documentId specified for check exist!');\n    }\n\n\n    try {\n\n      const onlineFunc: any = this.checkDocumentExistFromServer;\n      const oflineFunc: any = this.checkDocumentExistsOfflineMode;\n\n      return await this.executeDataFunction(onlineFunc, oflineFunc, documentId, includeDeleted);\n\n    } catch (err) {\n      throw UtilError.createErrorObject(err);\n    }\n  }\n\n  /**\n   * get a document\n   */\n  async getDocument(id: string, expectedDocumentType? : string): Promise<any> {\n\n    if (!id) {\n      // old code reject this error as string\n      throw 'No documentId specified for getDocument!';\n    }\n\n    const raiseError = (err) => {\n      let error;\n      if (err.status === UtilHttpStatus.FORBIDDEN) {\n        error = UtilError.createError(err.message, UtilError.FORBIDDEN_ERROR);\n      } else if (err.status === UtilHttpStatus.NOT_FOUND) {\n        const isOffline = !this.offlineStatusService.isConnected() && this.offlineStatusService.isOfflineMode();\n        const errorMessage = isOffline ? `Device is offline and document ${id} not found.` : err.message;\n        error = UtilError.createError(errorMessage, UtilError.NOT_FOUND_ERROR);\n      } else if (err.status === UtilHttpStatus.GONE) {\n        error = UtilError.createError(err.message, UtilError.DELETED_ERROR);\n      } else {\n        error = UtilError.createErrorObject(err);\n      }\n      throw error;\n    }\n\n    try {\n\n      const onlineFunc: any = this.getDocumentFromServer;\n      const oflineFunc: any = this.getDocumentOfflineMode;\n\n      const doc = await  this.executeDataFunction(onlineFunc, oflineFunc, id, expectedDocumentType);\n      if (doc) {\n        if (doc.systemHeader && doc.systemHeader.offline) {\n          delete doc.systemHeader.offline;\n        }\n        return cloneDeep(doc);\n      } else {\n        const error: any = new Error(`Document ${id} not found.`);\n        error.status = UtilHttpStatus.NOT_FOUND;\n        raiseError(error);\n      }\n\n    } catch (err) {\n      raiseError(err);\n    }\n\n    \n  }\n\n  async getTemplateAndDocument(id: string, templateId?: string) {\n    \n    console.log(`Getting template and document from id: ${id} and templateId: ${templateId}`);\n\n    try {\n      const onlineFunc: any = this.restDataService.getTemplateAndDocument;\n      const oflineFunc: any = this.getTemplateAndDocumentOfflineMode;\n\n      return await  this.executeDataFunction(onlineFunc, oflineFunc, id, templateId);\n    } catch (error) {\n      raiseError(error)\n    }\n\n    function raiseError(error) {\n      if (error.status <= 0) {\n        error.message = `Caught error on Network Suspension: ${error.status}: ${error.statusText}.`;\n      }\n      throw error;\n    }\n  }\n\n  /* if offline mode then retrieve the latest version of the document from offline db and name as cachedDoc\n   * if the cachedDoc is not yet sent to server then return it;\n   * else query the server for the latest versionId of the document\n   * if versions don't match, use server's version and perform 'documentReset'\n   *\n   * DocumentReset will remove all versions of a document\n   * and start from the beginning as a single version (that current version from the server)\n   *\n   * DocumentReset is there primarily there to simplify retrieving documents once there have\n   * been version conflicts that have been resolved by the server: when two users modifies\n   * a single document at the same time offline. If this do not occur, then documentReset will not happen.\n   */\n  getDocumentOfflineMode = (id, expectedDocumentType? : string): Promise<any> => {\n\n    const _self = this;\n\n    return new Promise((resolve, reject) => {\n\n      _self.indexedDBService.getDocumentCurrentVersion(id,\n        (cacheDoc) => { // latest version\n\n          resolve(cacheDoc);\n\n          // Do not retrieve the server's version if this document is still unsent.\n          // var unsent = cacheDoc.offline &&\n          //     cacheDoc.offline.status === IndexedDBConstants.OFFLINE_STATUS_PENDING;\n          // if (unsent) {\n          //     deferred.resolve(cachedObject);\n          //     return;\n          // }\n\n\n          // //let's see if we have conflicts from the server:\n          // getDocumentFromServer(id).then((doc) => {\n          //     var identicalDocuments = doc.systemHeader.versionId === cachedDoc.systemHeader.versionId;\n          //     if (!identicalDocuments) {//version conflict! see 10049 & 10539\n          //         IndexedDBService.documentReset(doc.documentId);\n          //     //doc here is the latest version from the document that have been resolved by the server from conflict\n          //         cacheDocument(doc);\n          //     }\n          //\n          //     deferred.resolve(doc);\n          //\n          // }, function err(statusCode){\n          //     //we could not retrieve from the server due to some error, return the cachedDoc instead\n          //     deferred.resolve(cachedDoc);\n          //\n          // });\n\n        }\n      );\n    });\n  }\n\n   getDocumentFromServer = async (id: string, expectedDocumentType?: string): Promise<any>  => {\n    try {\n      return await this.restDataService.getDocument(id, expectedDocumentType);\n    } catch (error) {\n      const offlineMode = this.offlineStatusService.isOfflineMode();\n      if (offlineMode && error && error.status === UtilHttpStatus.SERVER_UNRESPONSIVE) {\n        error.status = UtilHttpStatus.NOT_FOUND;\n      }\n\n      throw error;\n    }\n  }\n\n  private checkDocumentExistsOfflineMode = async (id: string, includeDeleted?: boolean) => {\n\n    const _self = this;\n\n    return await new Promise((resolve) => {\n\n      _self.indexedDBService.getDocumentCurrentVersion(id, cacheDoc => {\n        resolve(!!cacheDoc);\n      });\n\n    });\n\n  };\n\n   private checkDocumentExistFromServer = async(id: string, includeDeleted?: boolean) => {\n\n    const _self = this;\n\n    try {\n      return await _self.restDataService.checkDocumentExists(serverRoutes.documentExists, id, includeDeleted);\n    } catch (error) {\n      const offlineMode: boolean = _self.offlineStatusService.isCachingEnabled();\n\n      if (offlineMode && error && error.status === UtilHttpStatus.SERVER_UNRESPONSIVE) {\n        error.status = UtilHttpStatus.NOT_FOUND;\n        error.message = 'Network connection lost. Could not retrieve.';\n      }\n\n      throw error;\n    }\n  };\n\n  findByElastic(query, searchContext?): Promise<any> {\n    const options = {\n      filter: query\n    };\n\n    return this.search(options, searchContext);\n  }\n\n  generatePit() {\n    return this.restDataService.generatePit();\n  }\n\n  aggregate(query) {\n    return this.restDataService.aggregate(query);\n  }\n\n  search(options, searchContext): Promise<any> {\n\n    const _self = this;\n\n    return new Promise((resolve, reject) => {\n      if (searchContext) {\n        const keys = Object.keys(searchContext);\n        if (keys && keys.length) {\n          for (const key of keys) {\n            options[key] = searchContext[key];\n          }\n        }\n      }\n\n      const offlineMode = _self.offlineStatusService.isOfflineMode();\n      const isConnected = this.offlineStatusService.isConnected();\n      const shouldOperateOnline = _self.offlineStatusService.shouldOperateOnline();\n\n      const searchOffline = () => {\n        _self.indexedDBService.search(options).then(\n          (data2: any) => {          \n            resolve(data2);\n          },\n          (err) => {\n            logger.error('Search by indexedDB failed with error: ');\n            logger.error(err);\n            reject(err);\n          }\n        );\n      };\n\n      if (options.text || options.filter) {\n        if (options.document) {\n          const doc = {\n            document: options.document,\n            account: _self.user.account\n          };\n\n          if (!UtilType.isString(options.filter)) {\n            options.filter = JSON.stringify(options.filter);\n          }\n\n          if (!options?.disableHandlebars) {\n            const hbTemplate = Handlebars.compile(options.filter);\n            options.filter = hbTemplate(doc);\n          }\n\n          delete options.document;\n        }\n\n        if (options.searchOfflineOnly) {\n          if (!offlineMode) {\n            reject(new Error('Please enable caching before performing a search configured as offline only'));\n          } else {\n            searchOffline();\n          }\n        } else if (offlineMode && (!isConnected || shouldOperateOnline === false)) {\n          searchOffline();\n        } else {\n          _self.restDataService.search(options).then(\n            (data: any) => {\n\n              if (!data.statusCode && data.statusCode !== UtilHttpStatus.OK && offlineMode) {\n                searchOffline();\n              } else {\n                resolve(data);\n              }\n\n            }, (err) => {\n\n              if (offlineMode) {\n                searchOffline();\n              } else {\n                reject(err);\n              }\n            }\n          );\n        }\n\n      } else if (options.searchOptions && options.searchOptions.dexieSearchFunction && offlineMode) {\n        searchOffline();\n      } else {\n\n        const er = UtilError.createError('Undefined search text or query!');\n        reject(er);\n\n      }\n    });\n  }\n\n  /** initialise the service passed in and return a promise for initialisation completion\n   *\n   * @param service - the service to initialise\n   */\n  initialiseService(service) {\n    if (service && service.initialise) {\n      return service.initialise();\n    }\n\n    // no initialise function in service\n    return Promise.resolve();\n  }\n\n  terminateService(service): Promise<any> {\n    if (service && service.terminateService) {\n      return service.terminateService();\n    }\n\n    // no terminateService function in service\n    return Promise.resolve();\n  }\n\n  /** set the versionId and previousVersionId fields */\n  setVersionFields(document) {\n    if (document && document.systemHeader) {\n      if (document && document.systemHeader.versionId) {\n        document.systemHeader.previousVersionId = document.systemHeader.versionId;\n\n        document.systemHeader.versionId = UtilDocumentId.generateId();\n\n        // update createdBy every time because when we save the doc it's a new version\n        document.systemHeader.createdBy = this.user?.account?.documentId;\n      }\n    }\n  }\n\n  private hasOfflineAccess(document) {\n    return this.clientAccessService.hasPermission(document, SharedConstants.OPERATION_TYPE_OFFLINE);\n  }\n\n  private isAccountDoc(doc) {\n    return doc.systemHeader && (\n      doc.systemHeader.systemType === SharedConstants.SYSTEM_TYPE_ACCOUNT ||\n      doc.systemHeader.systemType === SharedConstants.SYSTEM_TYPE_ACCOUNT_SECURITY ||\n      doc.systemHeader.systemType === SharedConstants.SYSTEM_TYPE_ACCOUNT_CONTROL);\n  }\n\n  async jsonPatchUpdate(originalBean, newBean, updateOption?) {\n    const patchedVersionId = originalBean.systemHeader?.versionId;\n    // set the details like the versionId and previousVersionId\n    this.setVersionFields(newBean);\n\n    // set the systemHeader.createdDate in the new version. The systemHeader.createdDate is the created date of the\n    // version, rather than the document, so each version needs to have a new createdDate. See Mantis 10816 for further\n    // details\n    newBean.systemHeader.createdDate = Date.now();\n\n    // always use the Database Service if caching is enabled, so that the items will be placed in the\n    // queue to be sent to the server, otherwise items can be saved in the wrong\n    // order if there is anything already in the queue\n    const updates = await DocumentUpdater.getUpdates(originalBean, newBean);\n    const options: any = {\n      updates: updates,\n      isUpdateFromPreviousVersion: UtilDocument.isPreviousVersion(newBean),\n      overrideTemplateId: updateOption ? updateOption.overrideTemplateId : null,\n      template: updateOption ? updateOption.templateId : null,\n      makeCurrentVersion: updateOption ? updateOption.makeCurrentVersion : null,\n      importPreviousVersion: updateOption ? updateOption.importPreviousVersion : null,\n      documentSession: this.documentSessionService.getDocumentSession(originalBean.documentId),\n      patchedVersionId\n    };\n    const offlineMode =  this.offlineStatusService.isCachingEnabled() && this.offlineStatusService.isInitialCachingComplete();    \n    const shouldSaveOffline  = await this.shouldSaveOffline(originalBean, false, newBean);\n    if (shouldSaveOffline ) {\n      const doc = this.indexedDBService.jsonPatchUpdate(newBean, originalBean, options);\n      if (!this.hasOfflineAccess(newBean)) {\n        this.indexedDBService.documentReset(originalBean.documentId);\n      }\n      return doc\n    }\n    try{\n      return await this.restDataService.jsonPatchUpdate(newBean, options);\n    } catch (err) {         \n      if (offlineMode && err?.status === 503) {\n        try{\n           return await this.indexedDBService.jsonPatchUpdate(newBean, originalBean, options);\n        }catch (error){\n          throw error;\n        } \n       \n      } else {\n        throw err;\n      }  \n\n    }\n  }\n\n\n  /**\n   * Called in CacheLoadService.enable cache to re-arrange primary and secondary data service\n   */\n  initialise() {\n\n    const _self = this;\n\n    const offlineMode = _self.offlineStatusService.isOfflineMode();\n    _self.preferredService = offlineMode ? _self.indexedDBService : _self.restDataService;\n    _self.secondaryService = offlineMode ? _self.restDataService : null;\n\n    return _self.initialiseService(_self.preferredService).then(() => {\n      return _self.initialiseService(_self.secondaryService);\n    });\n  }\n\n  // terminateService DataServices on logout. See InitialisationService.terminateDefaultServices\n  reset() {\n\n    const _self = this;\n\n    return _self.terminateService(_self.preferredService).then(() => {\n      return _self.terminateService(_self.secondaryService);\n    }).then(() => {\n      // RestDataService is necessary for login.\n      // Make RestDataService as the preferred service and reset.\n      _self.preferredService = _self.restDataService;\n      return _self.initialiseService(_self.preferredService);\n    });\n  }\n\n  /*\n  jsonPatchUpdate function\n  parameters:\n  bean - the bean to update\n  cachingRequired - whether to save the record to the local database. Records that never need\n  to be loaded in the app on their own, such as events, can have this set to false\n  */\n  deepDiffUpdate(originalBean, newBean, options?) {\n    return this.jsonPatchUpdate(originalBean, newBean, options);\n  }\n\n  /*\n   insert function\n   parameters:\n   bean - the bean to insert\n   successFunction - a function to execute on success to do post save steps\n   cachingRequired - whether to save the record to the local database. Records that never need\n   to be loaded in the app on their own, such as events, can have this set to false\n   */\n  async insert(bean, cachingRequired?): Promise<any> {\n    // set the details like the versionId and previousVersionId\n    this.setVersionFields(bean);\n\n    // a different version of the data service will be used depending on whether offline is enabled.\n    // assign the service that is to be used rather than the function because assigning a function that is a member of\n    // a class means the this object of the function will not be defined\n    let dataSaveService;\n    let shouldSaveOffline;\n    const offlineMode =  this.offlineStatusService.isCachingEnabled() && this.offlineStatusService.isInitialCachingComplete();     \n    try {\n      shouldSaveOffline  = await this.shouldSaveOffline(bean, true);\n      dataSaveService = shouldSaveOffline ? this.indexedDBService : this.restDataService;\n\n      const fullUrl = UtilService.getDataUrl(serverRoutes.document);\n\n      return await dataSaveService.insert(bean, fullUrl, cachingRequired);\n    } catch (error) {     \n      if (offlineMode && error?.status === 503) {\n        try{\n          return await this.indexedDBService.insert(bean);\n        }catch (error){\n          throw error;\n        }\n        \n      } else {\n        throw error;\n      }      \n    }\n  }\n\n  async destroy(id, templateId?, versionId?): Promise<any> {\n\n    const document = await this.getDocument(id);\n    const offlineMode =  this.offlineStatusService.isCachingEnabled() && this.offlineStatusService.isInitialCachingComplete();     \n    try {\n     \n      const shouldSaveOffline = await this.shouldSaveOffline(document, false);\n      let result;\n      if (shouldSaveOffline) {\n         result = await this.indexedDBService.destroy(id);\n      } else {\n         result = await this.restDataService.destroy(id, serverRoutes.document, null, templateId, versionId);\n      }\n      \n      if (document && document?.systemHeader?.systemType === SharedConstants.SYSTEM_TYPE_FILE_REFERENCE) {          \n        await this.destroyFileFromCache(document);\n      }\n      return result\n    } catch (err) {      \n      if (offlineMode && err?.status === 503) {\n        try{\n          return await this.indexedDBService.destroy(id);\n        }catch (error){\n          throw error;\n        }\n        \n      } else {\n        const message = typeof err === 'string' ? err : err.message; \n        logger.log('Delete failed with error: ' + message);\n        throw new Error(message);  \n      }          \n    }\n  }\n\n  /**\n   * load unsynced and cache documents into indexedDB\n   */\n  async workerLoadDataCache(): Promise<any> {\n\n    const _self = this;\n    if (!_self.offlineStatusService.isCachingEnabled() || this.isRunningPreviousSync || \n          _self.loggedInUserService.getUserConfigItem('isRunningCacheClear')) {\n      return Promise.resolve();\n    }\n\n    let syncStartTime = _self.offlineStatusService.getLastSyncDate();\n    if (!syncStartTime) {\n      syncStartTime = 0;\n      logger.log('Loading data cache from beginning of time');\n    } else {\n      logger.log('Loading data cache from time: ' + syncStartTime);\n    }\n\n    _self.isRunningPreviousSync = true;\n    // _self.loggedInUserService.setUserConfigItem('initialCacheCompleted', false);\n    await this.offlineStatusService.getOfflineStatusFromKeyValueStorage();\n    // _self.offlineStatusService.setDataCachingCompleted(false);\n    this.offlineStatusService.offlineStatus.cacheLoading = true;\n\n    return _self.restDataService.workerLoadDataCache(syncStartTime, true).then(async (results) => {\n      logger.log('Done caching offline documents. Adding any search indexes from indexedDBIndexes.');\n      \n      await _self.loadFileAttachmentCache();\n      \n      _self.loggedInUserService.setUserConfigItem('ErrorCachingAttachedFiles', _self.offlineStatusService.offlineStatus.errorCacheAttachedFile);\n\n      console.log('Done Data Caching.');\n      _self.offlineStatusService.setDataCachingCompleted(true);\n      _self.loggedInUserService.setUserConfigItem('initialCacheCompleted', true);\n\n      // registers search indexes\n      return _self.indexedDBConnectorService.upgradeIndexedDB().then(\n        () => {\n          return Promise.resolve(results);\n        },\n        (err) => {\n          return Promise.reject(err);\n        }\n      );\n\n    }, (err) => {\n\n      logger.error('Error caching offline documents.');\n      logger.error(err);\n\n      _self.isRunningPreviousSync = false;\n\n      return Promise.reject(err);\n    }).then((results) => {\n\n      logger.log('Done registering search indexes.');\n      \n      this.offlineStatusService.checkCachingCompleted();\n\n      _self.isRunningPreviousSync = false;\n\n      return Promise.resolve(results);\n\n    }, (err) => {\n\n      logger.error('Error in registering search indexes.');\n      logger.error(err);\n\n      _self.isRunningPreviousSync = false;\n      \n      return Promise.reject(err);\n\n    });\n  }\n\n  /**\n   * load unsynced and cache documents into indexedDB\n   * @param isInitialize - whether in the case the documents are cached in the first time\n   */\n  async loadDataCache(isInitialize?): Promise<any> {\n\n    const _self = this;\n\n    if (!_self.loggedInUserService.getUserConfigItem('initialCacheCompleted')) {\n      // _self.offlineStatusService.setInitialCachingComplete(false);\n      _self.workerLoadDataCache();\n      return Promise.resolve();\n    }\n\n    if (!_self.offlineStatusService.isCachingEnabled() || this.isRunningPreviousSync || \n        _self.loggedInUserService.getUserConfigItem('isRunningCacheClear')) {\n      return Promise.resolve();\n    }\n\n    let syncStartTime = _self.offlineStatusService.getLastSyncDate();\n    if (!syncStartTime) {\n      syncStartTime = 0;\n      logger.log('Loading data cache from beginning of time');\n    } else {\n      logger.log('Loading data cache from time: ' + syncStartTime);\n    }\n\n    _self.isRunningPreviousSync = true;\n    await this.offlineStatusService.getOfflineStatusFromKeyValueStorage();\n    // _self.offlineStatusService.setDataCachingCompleted(false);\n\n    return _self.restDataService.workerLoadDataCache(syncStartTime, isInitialize).then((results) => {\n      logger.log('Done caching offline documents. Adding any search indexes from indexedDBIndexes.');\n\n      _self.offlineStatusService.setDataCachingCompleted(true);\n\n      // registers search indexes\n      return _self.indexedDBConnectorService.upgradeIndexedDB().then(\n        () => {\n          return Promise.resolve(results);\n        },\n        (err) => {\n          return Promise.reject(err);\n        }\n      );\n\n    }, (err) => {\n\n      logger.error('Error caching offline documents.');\n      logger.error(err);\n\n      _self.isRunningPreviousSync = false;\n\n      return Promise.reject(err);\n    }).then((results) => {\n\n      logger.log('Done registering search indexes.');\n\n      _self.offlineStatusService.checkCachingCompleted();\n\n      _self.isRunningPreviousSync = false;\n\n      return Promise.resolve(results);\n\n    }, (err) => {\n\n      logger.error('Error in registering search indexes.');\n      logger.error(err);\n\n      _self.isRunningPreviousSync = false;\n\n      return Promise.reject(err);\n\n    });\n  }\n\n  async clearData() {\n\n    const _self = this;\n\n    if (_self.offlineStatusService.isCachingEnabled()) {\n        this.restDataService.terminateDataCaching();\n        await _self.indexedDBService.clearData();\n        this.opfsCacheService.clearData();\n        await _self.indexedDBConnectorService.closeDatabase();\n        _self.isRunningPreviousSync = false;\n        return Promise.resolve(true);\n    } else {\n      return Promise.reject(new Error('You did not enable caching.'));\n    }\n  }\n\n  backupData(isFirstTime?) {\n\n    const _self = this;\n\n    return new Promise((resolve, reject) => {\n      if (_self.offlineStatusService.isCachingEnabled()) {\n        _self.indexedDBService.backupData().then(resolve, reject);\n      } else {\n        reject(new Error('You did not enable caching.'));\n      }\n    });\n  }\n\n  async backupDataInChunks(chunkSize: number, processChunk: (chunk: any[]) => void) {\n    if (this.offlineStatusService.isCachingEnabled()) {\n      return this.indexedDBService.backupDataInChunks(chunkSize, processChunk);\n    } else {\n      throw new Error('Offline backup failed because caching has not been enabled.');\n    }\n  }\n\n  getIndexedDBIndexes() {\n    return this.restDataService.getIndexedDBIndexes();\n  }\n\n  async undestroy(id: string): Promise<any> {\n\n    if (this.offlineStatusService.isCachingEnabled()) {\n\n      const errMsg = 'You need to be online to undelete a document. ';\n      logger.error(errMsg);\n      throw new Error(errMsg);\n\n    } else {\n\n      const url = 'api/undelete';\n      try {\n        return await this.restDataService.undestroy(id, url);\n      } catch (err) {\n        logger.error('Delete failed with error: ' + err);\n        throw new Error(err);\n      }\n    }\n  }\n\n  async bulkUploadDocuments(documents): Promise<any> {\n\n    if (this.offlineStatusService.isCachingEnabled()) {\n\n      const errMsg = 'You need to be online to upload multiple documents. ';\n      console.error(errMsg);\n\n      throw new Error(errMsg);\n\n    } else {\n\n      const url = 'api/bulkUploadDocuments';\n\n      try {\n\n        return await this.restDataService.bulkUploadDocuments(documents, url);\n\n      } catch (err) {\n\n        console.error('Upload documents failed with error: ' + err);\n        throw new Error(err);\n\n      }\n    }\n  }\n\n  executeComponentFunction(options): Promise<any> {\n    const _self = this;\n\n    return new Promise((resolve, reject) => {\n\n      const offlineMode = _self.offlineStatusService.isOfflineMode();\n\n\n      if (options.componentWebServiceName) {\n\n        const searchOffline = () => {\n          _self.indexedDBService.executeComponentFunction(options).then(\n            (data2) => {\n              resolve(data2);\n            },\n            (err) => {\n              reject(err);\n            }\n          );\n        };\n\n        if (options.searchOfflineOnly) {\n          if (!offlineMode) {\n            reject(new Error('Please enable caching before performing a search configured as offline only'));\n          } else {\n            searchOffline();\n          }\n        } else {\n          _self.restDataService.executeComponentFunction(options).then(\n            (data: any) => {\n\n              if (!data.statusCode && data.statusCode !== UtilHttpStatus.OK && offlineMode) {\n                searchOffline();\n              } else {\n                resolve(data);\n              }\n\n            }, (err) => {\n\n              if (offlineMode) {\n                searchOffline();\n              } else {\n                reject(err);\n              }\n            }\n          );\n        }\n\n      } else {\n\n        const er = UtilError.createError('Undefined executeComponentFunction componentWebServiceName and functionParameters!');\n        reject(er);\n\n      }\n\n    });\n  }\n\n  getTemplateAndDocumentOfflineMode = (id, templateId): Promise<any> => {\n\n    const _self = this;\n\n    return new Promise((resolve, reject) => {\n\n      _self.indexedDBService.getTemplateAndDocument(id, templateId,\n        async (err, cacheDoc) => { // latest version\n          const offlineMode = _self.offlineStatusService.isOfflineMode();\n          const isConnected = this.offlineStatusService.isConnected();\n\n          if (cacheDoc == null && isConnected && !offlineMode) { // not found in offline? retrieve from server\n            try {\n              const result = await this.restDataService.getTemplateAndDocument(id, templateId);\n              resolve(result);\n            } catch (error) {\n              if (offlineMode && error && error.status === UtilHttpStatus.SERVER_UNRESPONSIVE && err) {\n                error.status = UtilHttpStatus.NOT_FOUND;\n              }\n              \n              reject(error);\n            }\n          } else if (err) {\n            if (!isConnected && offlineMode) {\n              const msg = String(err.message).charAt(0).toLowerCase() + String(err.message).slice(1);\n              err.message = 'Device is offline and ' + msg;\n            }\n\n            reject(err);\n          } else {\n            const sysHeader = cacheDoc?.document?.systemHeader;\n            if (sysHeader?.deleted === true) {\n              reject(UtilError.createError('Document has been deleted', UtilError.DELETED_ERROR));\n            } else {\n              resolve(cacheDoc);\n            }\n          }\n        }\n      );\n    });\n  }\n\n\n  async loadFileAttachmentCache(){\n\n    const tbl = IndexedDBConstants.DOCUMENT_TABLE_NAME;\n    const index = IndexedDBConstants.DOCUMENT_INDEX_SYSTEM_TYPE;\n    const searchValue = 'fileReference';\n\n    return new Promise((resolve, reject) => {\n      this.indexedDBService.getEntries(tbl, index, searchValue, async(documents) => {\n        const promises = [];\n        this.offlineStatusService.offlineStatus.maxCacheAttachedFileCount = documents.length;\n        this.offlineStatusService.publishOfflineStatus();\n        for(let doc of documents) {\n          for (const details of doc.fileDetails) {\n            if (!this.offlineStatusService.isCachingEnabled()) {\n              this.offlineStatusService.offlineStatus.errorCacheAttachedFile = [];\n              this.offlineStatusService.offlineStatus.maxCacheAttachedFileCount = 0;    \n              this.offlineStatusService.offlineStatus.currentCacheAttachedFileCount = 0;\n              resolve(true);\n              return; \n            }\n            promises.push(await this.cacheAttachedFilesOffline(details));\n          }\n          this.offlineStatusService.offlineStatus.currentCacheAttachedFileCount++;\n          this.offlineStatusService.publishOfflineStatus();\n        }\n        resolve(await Promise.all(promises));\n      });\n    });\n\n  }\n\n  /**\n   restFunc: will pass RestDataService function\n   offlineFunc: will pass IndexedDBService function\n   args: will pass the arguments object described at https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments\n   */\n  executeDataFunction = async (onlineFunc, offlineFunc, ...args) => {\n    const offlineMode = this.offlineStatusService.isOfflineMode();      \n    const isConnected = this.offlineStatusService.isConnected();\n    const shouldOperateOnline = this.offlineStatusService.shouldOperateOnline();\n    try {\n      if (offlineMode && (!isConnected || shouldOperateOnline === false)) {\n        return await offlineFunc(...args);\n      } else {\n        const returnObj = await onlineFunc(...args);\n        \n        if (offlineMode && isConnected && returnObj) {\n          // cache offline documents when they are fetched from server\n          if (returnObj.document && this.hasOfflineAccess(returnObj.document)) {\n            await this.indexedDBService.cacheDocument(returnObj.document, true);\n          }\n          if (returnObj.template && this.hasOfflineAccess(returnObj.template)) {\n            await this.indexedDBService.cacheDocument(returnObj.template, true);\n          }\n\n          if (returnObj.documentId && this.hasOfflineAccess(returnObj)) {\n            await this.indexedDBService.cacheDocument(returnObj, true);\n          }\n        }\n        return returnObj;\n      }\n    } catch (err) {\n      const offlineMode =  this.offlineStatusService.isCachingEnabled() && this.offlineStatusService.isInitialCachingComplete(); \n      if (offlineMode) {\n        try{\n          return await offlineFunc(...args);\n        } catch (error) {\n          throw error;\n        }        \n      } else {\n        throw err;\n      }\n    }\n  }\n\n  async loadComponentDoc(directiveName) {\n    \n    try {\n\n      return await this.restDataService.loadComponentDoc(directiveName);\n\n    } catch (e) {\n\n      const offlineMode = this.offlineStatusService.isOfflineMode();\n\n      if (offlineMode) {\n        try{\n          return await this.indexedDBService.loadComponentDoc(directiveName);\n        }catch (err){\n          throw err;\n        }      \n      \n      }\n    \n    }\n  }\n\n  private async cacheAttachedFilesOffline(file: FileReferenceDetails) {\n    try {\n      if (this.offlineStatusService.isCachingEnabled()) {\n        const blob = await this.restDataService.loadFile(file.fileNo);\n        await this.opfsCacheService.cacheFile(file, blob);\n        await this.indexedDBService.saveFile(file);\n      }\n    } catch (e) {\n      const errMsg = `Can not cache file: ${file.fileName}. Error: ${e?.message}`;\n      console.warn(errMsg);\n      this.offlineStatusService.offlineStatus.errorCacheAttachedFile.push(errMsg);\n    }\n\n  }\n\n  private shouldSaveOffline = (bean, isInsert?, newBean?) => {\n      return new Promise(async (resolve, reject) => {\n        if (!this.offlineStatusService.isOfflineMode()){   \n          resolve(false);\n        } else {          \n          let hasOfflineAccess = this.hasOfflineAccess(bean);\n          if (isInsert && hasOfflineAccess && bean.systemHeader && bean.systemHeader.templateId) {\n            const template = await this.getDocument(bean.systemHeader.templateId, SharedConstants.SYSTEM_TYPE_TEMPLATE);\n            hasOfflineAccess = this.hasOfflineAccess(template);\n          }\n\n          if (hasOfflineAccess && !this.isAccountDoc(newBean || bean)) {\n              const connectedToServer = await this.offlineStatusService.checkServerConnectionStatus();\n              const pendingSyncCount: any = await this.indexedDBService.getUnprocessedDocsCount();\n              if (pendingSyncCount < 1 && this.offlineStatusService.shouldOperateOnline() && connectedToServer) {\n                resolve(false);\n              } else {\n                resolve(true);\n              }           \n          } else if (!this.offlineStatusService.isConnected()  && !hasOfflineAccess) {\n            reject(new Error(\"Cannot save because the device is offline and the document is not set up for offline access. \" \n              + \"The document needs to have an offline key on it even if the template has an offline key.\"));\n          } else {\n            resolve(false);\n          }          \n        }\n       \n      });\n  }\n\n  destroyFileFromCache = (fileReferenceDocument) => {\n    return new Promise(async (resolve, reject) => {\n      if ('caches' in window) {\n        try {\n          // Open the cache dynamically using the origin\n          const cache = await caches.open(`workbox-runtime-${location.origin}/`);\n          console.log(\"Cache opened:\", cache);\n          \n          const clientConfig = this.configService.clientConfig();\n          const fileUploaderConfig: any = clientConfig.fileUploader || {};\n          const fileField = fileUploaderConfig.fileUploaderField;\n          const fileFieldValue = fileReferenceDocument[fileField];\n\n          if (fileFieldValue && fileFieldValue.length > 0) {\n            // Use a Promise.all to delete files in parallel\n            const deletePromises = fileFieldValue.map(async (file) => {\n              const fileId = file.fileNo;\n              const fileUrl = `/api/getFile/${fileId}`;\n              console.log(`Attempting to delete file with ID: ${fileId}`);\n\n              try {\n                // Check if the file is in the cache before deleting\n                const response = await cache.match(fileUrl);\n                if (response) {\n                  await cache.delete(fileUrl);\n                  console.log(`Successfully deleted file ${fileId} from cache`);\n                } else {\n                  console.log(`File ${fileId} not found in cache.`);\n                }\n              } catch (err) {\n                console.error(`Failed to delete file ${fileId} from cache`, err);\n                reject(`Error deleting file ${fileId}`); \n              }\n            });\n\n            // Wait for all deletions to finish\n            await Promise.all(deletePromises);\n          }\n\n          resolve(true); // All deletions completed successfully\n        } catch (error) {\n          logger.error('Error deleting files from cache:', error);\n          reject(error);  \n        }\n      } else {\n        logger.error('Error opening cache to delete files from cache:');\n        resolve(true); \n      }\n    });\n  };\n\n}\n","import { Injectable, ViewContainerRef, inject } from '@angular/core';\nimport { ComponentDefinition, ComponentDocument, DocumentData, ErrorComponentDefinition, FormCustomElement, FormDocument, FormParameters, FormTemplate, User } from '@formbird/types';\nimport * as async from 'async';\nimport { isEmpty, startsWith } from 'lodash';\nimport * as lodashString from 'lodash/string';\nimport { ConfigService } from '../config/config.service';\nimport { TemplateHtmlService } from '../document/template-html.service';\nimport { NotificationService } from '../notification/notification.service';\nimport { OfflineStatusService } from '../offline-status/offline-status.service';\n\nimport loadjs from 'loadjs';\nimport { DataService } from '../data/data.service';\n\n@Injectable()\nexport class ComponentService {\n  private notificationService = inject(NotificationService);\n  private templateHtmlService = inject(TemplateHtmlService);\n  private configService = inject(ConfigService);\n  private offlineStatusService = inject(OfflineStatusService);\n  private dataService = inject(DataService);\n\n\n  loadedComponentDocs = {};\n  public loadedComponents = {};\n  private loadedVendorLibs = {};\n\n\n  async loadVendorLibs(vendorLibs): Promise<void> {\n    const vendorLibraryBasePath = this.configService.clientConfig().vendorLibraryBasePath || '';\n\n    return new Promise((resolve, reject) => {\n      async.eachSeries(vendorLibs, (fileName, next) => {\n        fileName = fileName.replace('${vendorLibraryBasePath}', vendorLibraryBasePath);\n        \n        if (!this.loadedVendorLibs[fileName]) {\n          loadjs([fileName], {\n            returnPromise: true\n          }).then(() => {\n              this.loadedVendorLibs[fileName] = true;\n              next(null);\n            },\n            (err) => {\n              next();\n              let offlineMsg = \"\";\n              if (this.offlineStatusService.isCachingEnabled()) {\n                offlineMsg = ' Please ensure that the library is configured for offline use ' +\n                  'by setting offline keys on the vendor library document'\n              }\n\n              const msg = `Error loading component vendorLibrary: ${fileName}.${offlineMsg}`;\n              console.log(msg);\n              this.notificationService.error(msg);\n            }\n          );\n        } else {\n          next();\n        }\n      }, function (errorMsg) {\n          if (errorMsg) {\n            reject(new Error(errorMsg));\n          }\n\n          resolve();\n      });\n    });\n  }\n\n  async loadTemplateVendorLibs(template) {\n    if (template && template.vendorLibrariesRel) {\n      const templateVendorLibs = this.getFileNamesFromVendorLib(template.vendorLibrariesRel);\n      await this.loadVendorLibs(templateVendorLibs);\n    }\n  }\n\n  async registerComponents(componentDefs,\n                           documentData: DocumentData,\n                           formParameters: FormParameters,\n                           user: User,\n                           vcr: ViewContainerRef,\n                           dynamicContainerComponent: any) {\n    if (!componentDefs) {\n      return Promise.resolve();\n    }\n\n    let key = 0;\n\n    async.eachSeries(componentDefs, (componentDef, next) => {\n      const directiveName = componentDef.componentName;\n      if (directiveName && !startsWith(directiveName, 'ft-') &&  !startsWith(directiveName, 'cc-')) {\n        const componentName = componentDef.componentName;\n        const promise = this.loadComponentDocAndVendorLibs(componentName).then(\n          () => {\n            componentDef.componentName = this.componentDocExists(componentDef.componentName) ?\n              componentDef.componentName : 'ft-component-error';\n            this.templateHtmlService.appendComponent(componentDef,\n              documentData, formParameters, user, key, vcr, dynamicContainerComponent);\n            key++;\n            next();\n          });\n      }\n    } , function (errorMsg) {\n      if (errorMsg) {\n        return Promise.reject(new Error(errorMsg));\n      }\n      return Promise.resolve();\n    });\n  }\n\n  private getFileNamesFromVendorLib(vendorLibrariesRel) {\n    const fileNames = [];\n    if (vendorLibrariesRel && vendorLibrariesRel.length) {\n      vendorLibrariesRel.forEach((vendorLib) => {\n        if (vendorLib.fileName) {\n          const fileName = vendorLib.fileName;\n          if (!isEmpty(fileName) && !this.loadedVendorLibs[fileName]) {\n            fileNames.push(fileName);\n          }\n        } else if (vendorLib.fileNames) {\n          fileNames.push(...vendorLib.fileNames);\n        }\n      });\n    }\n\n    return fileNames;\n  }\n\n  /**\n   * Load component document\n   * @param directiveName the directive name\n   * @returns the promise of component doc\n   */\n  async loadComponentDoc(directiveName) {\n    if (!this.loadedComponentDocs[directiveName]) {\n      const componentDoc =  await this.dataService.loadComponentDoc(directiveName);\n      this.loadedComponentDocs[directiveName] = componentDoc;\n    } \n\n    return this.loadedComponentDocs[directiveName];\n  }\n\n  /**\n   * whether the component has been loaded\n   * @param directiveName the directive name\n   * @returns the result\n   */\n  componentExists(directiveName) {\n\n    return this.loadedComponents[directiveName];\n  }\n\n  /**\n   * whether the component doc has been loaded\n   * @param directiveName the directive name\n   * @returns the result\n   */\n  componentDocExists(directiveName) {\n\n    return !!this.loadedComponentDocs[directiveName];\n  }\n\n  loadComponentDocAndVendorLibs(componentName): Promise<ComponentDocument> {\n    return new Promise((resolve, reject) => {\n      if (!this.componentDocExists(componentName)) {\n        this.loadComponentDoc(componentName).then(\n          (componentDoc: ComponentDocument) => {\n            this.loadedComponentDocs[componentName] = componentDoc;\n\n            const compVendorLibRels = componentDoc?.vendorLibrariesRel;\n            if (compVendorLibRels && compVendorLibRels.length) {\n              const compVendorLibRel = componentDoc.vendorLibrariesRel;\n              const compVendorLibs = this.getFileNamesFromVendorLib(compVendorLibRel);\n\n              this.loadVendorLibs(compVendorLibs).then(\n                () => {\n                  resolve(componentDoc);\n                },\n                () => {\n                  resolve(componentDoc);\n                }\n              );\n            } else {\n              resolve(componentDoc);\n            }\n          },\n          (err) => {\n            this.loadedComponentDocs[componentName] = null;\n            // do not break the chain in order to load the next component document\n            resolve(null);\n          }\n        );\n      } else {\n        resolve(this.loadedComponentDocs[componentName]);\n      }\n    });\n  }\n\n  async createComponent(\n    document: FormDocument,\n    template: FormTemplate,\n    formParameters: FormParameters,\n    account,\n    compDef: ComponentDefinition | ErrorComponentDefinition,\n    key: number,\n    isloadedComponentDocAndVendorLibs?\n  ): Promise<FormCustomElement> {\n    const COMPONENT_ERROR_NAME = 'ft-component-error';\n\n    if (!isloadedComponentDocAndVendorLibs){\n      await this.loadComponentDocAndVendorLibs(compDef.componentName);\n    }\n\n    let componentName: string;\n\n    if (template.loadComponentDocumentDependencies === false) {\n      componentName = compDef.componentName;\n    } else {\n      const componentDocExists = this.componentDocExists(compDef.componentName);\n      if (componentDocExists) {\n        componentName = compDef.componentName;\n      } else {\n        compDef = {\n          errorMessage: `Component not found: ${compDef.componentName}`,\n          ...compDef\n        };\n        componentName = COMPONENT_ERROR_NAME;\n      }\n    }\n\n    const anyWindow: any = window;\n\n    const componentNameCamelCase = lodashString.camelCase(componentName);\n\n    const isFunctionComponent = anyWindow.FormbirdServiceInjector?.componentFunctions?.[componentNameCamelCase];\n\n    let customElement;\n    const hasRegistered = customElements.get(componentName);\n    if (!hasRegistered && !isFunctionComponent) {\n      customElement = window.document.createElement(COMPONENT_ERROR_NAME);\n      compDef = {\n        errorMessage: `Component ${componentName} was found and loaded but it has not registered a custom element. \n          Components need to register a custom element matching the name of the component in the component document to work. \n          Check that the component package has been installed correctly.`,\n        ...compDef\n      };\n    } else {\n      customElement = window.document.createElement(componentName);\n    }\n\n    // pass the parameters of the component to the custom element\n    customElement.componentDefinition = compDef;\n    customElement.document = document;\n    // add a class that can be used to identify custom elements that have been rendered by the formbird core from the\n    // components array\n    customElement.className = \"ft-form-component\";\n    customElement.template = template;\n    customElement.formParameters = formParameters;\n    customElement.key = key;\n    customElement.account = account;\n    customElement.fieldName = compDef.name;\n    if (document) {\n      customElement.fieldValue = document[compDef.name];\n    }\n\n    return customElement;\n  }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { IApplicationState } from '../../redux/state/application.state';\nimport { DocumentData, DocumentInfo, FormParameters } from '@formbird/types';\nimport { cloneDeep } from 'es-toolkit';\nimport { AppStore } from '../../redux/store/app.store';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class CurrentDocumentInfoService {\n  private appStore = inject<AppStore<IApplicationState>>(AppStore);\n\n\n  getStoreDocumentInfo(): DocumentInfo {\n    return this.appStore.getState().formState.documentInfo;\n  }\n\n  getDocumentData(unsavedDocumentListId, selectedDocumentId, overrideTemplateId?): DocumentData {\n\n    const documentData: DocumentData = {};\n\n    if (unsavedDocumentListId) {\n\n      const storeDocInfo = this.getStoreDocumentInfo();\n      const documentInfo = storeDocInfo[unsavedDocumentListId] ? storeDocInfo[unsavedDocumentListId] : {};\n    \n      const documentInfoItem = documentInfo[selectedDocumentId];\n      if (documentInfoItem) {\n\n        documentData.documentId = selectedDocumentId;\n        documentData.document = cloneDeep(this.appStore.getState().formState.documents[selectedDocumentId]);\n        const templateId = overrideTemplateId ? overrideTemplateId : documentInfoItem.templateId;\n        documentData.templateId = templateId;\n        documentData.template = cloneDeep(this.appStore.getState().formState.templates[templateId]);\n        documentData.isNew = documentInfoItem.isNew;\n        documentData.isMainDoc = documentInfoItem.isMainDoc;\n      }\n    }\n    \n    return documentData;\n  }\n\n  getMainDocumentListId(): string {\n    \n    const documentInfo = this.appStore.getState().formState.documentInfo;\n    \n    const unsavedDocumentListIds = Object.keys(documentInfo);\n    \n    return unsavedDocumentListIds.filter((unsavedDocumentListId: string) => {\n      return this.getMainDocumentIdFromList(unsavedDocumentListId) !== null;\n    })[0];\n  }\n\n  getMainDocumentId() {\n    const mainDocumentListId = this.getMainDocumentId();\n    return this.getMainDocumentIdFromList(mainDocumentListId);\n  }\n\n  getMainDocumentIdFromList(unsavedDocumentListId) {\n    \n    const documentListInfo = this.appStore.getState().formState.documentInfo[unsavedDocumentListId];\n    \n    if (documentListInfo) {\n      const documentIds = Object.keys(documentListInfo);\n      const filteredIds = documentIds.filter((documentId: any) => {\n        return documentListInfo[documentId]?.isMainDoc;\n      });\n      if (filteredIds.length) {\n        return filteredIds[0];\n      }\n    }\n\n    return null;\n  }\n\n\n}\n","import { Injectable, inject } from '@angular/core';\nimport { UtilDocument, UtilDocumentId } from '@formbird/shared';\nimport { DocumentInfo } from '@formbird/types';\nimport { cloneDeep } from 'es-toolkit';\nimport {\n  formResetDocumentInfo,\n  formResetTemplateComponentDefinition,\n  formResetToOrgDocument,\n  formSetDocument,\n  formSetDocumentInfo,\n  formSetupDocumentList\n} from '../../redux/actions';\nimport { IApplicationState } from '../../redux/state/application.state';\nimport { AppStore } from '../../redux/store/app.store';\nimport { CurrentDocumentInfoService } from './current-document-info.service';\n\nconst logger = console;\n\n@Injectable()\nexport class UnsavedDocumentService {\n  private appStore = inject<AppStore<IApplicationState>>(AppStore);\n  private currentDocumentInfoService = inject(CurrentDocumentInfoService);\n\n\n  /**\n   * create a new unsaved document list. The unsaved document list is a list of documents that will be saved in a single\n   * operation. This allows saving of documents independently of the nav bar save button. Eg. If you open up a dialog with a\n   * template with a child doc then you need to save several documents on dialog close without saving the main document loaded\n   * in the form. We can't put parameters in the save function to handle special cases like whether the save is for a dialog\n   * because we would have to keep adding more special cases for saving from different locations.\n   */\n  createUnsavedDocumentList(isNewMainDocList?, existingUnsavedDocumentListId?) {\n\n    // generate an unsaved document list id, this will be used by the caller to keep track of this list. It will be passed\n    // to the save function to trigger the save of the documents in that list\n    const unsavedDocumentListId = existingUnsavedDocumentListId ? existingUnsavedDocumentListId : UtilDocumentId.generateId();\n\n    this.appStore.dispatch(formSetupDocumentList(isNewMainDocList, unsavedDocumentListId));\n\n    return unsavedDocumentListId;\n  }\n\n  getDocumentInfo(documentListId) {\n\n    if (!documentListId) {\n      throw new Error('No documentListId provided in getDocumentInfo');\n    }\n\n    return cloneDeep(this.appStore.getState().formState.documentInfo[documentListId]);\n  }\n\n  isModalDocument(documentListId) {\n\n    let res = false;\n\n    const storedDocInfoItem = this.appStore.getState().formState.documentInfo[documentListId];\n\n    if (storedDocInfoItem) {\n      \n      const documentIds = Object.keys(storedDocInfoItem);\n\n      documentIds.forEach(docId => {\n\n        const item = storedDocInfoItem[docId];\n        if (item.options?.formParameters?.isModal) {\n          res = true;\n        }\n\n      });\n    }\n\n    return res;\n  }\n\n  getDocumentListInfos(documentId) {\n    \n    const result = [];\n\n    const storedDocInfo = this.appStore.getState().formState.documentInfo;\n    const documentListIds = storedDocInfo ? Object.keys(storedDocInfo) : [];\n    documentListIds.forEach(documentListId => {\n      \n      const storedDocInfoItem = storedDocInfo[documentListId];\n      const documentIds = Object.keys(storedDocInfoItem);\n      \n      documentIds.forEach(docId => {\n      \n        const item = storedDocInfoItem[docId];\n        if (docId === documentId && item.loaded) {\n          \n          result.push({\n            documentListId,\n            template: this.appStore.getState().formState.templates[item.templateId]\n          });\n        }\n      \n      })\n    });\n\n    return result;\n  }\n\n  /**\n   * Get document information for each document inside a list. The result should be:\n  {\n    documentId: 'document-id',\n    templateId: 'template-id',\n    hierarchyInfo: {\n      parentDocumentId: 'parent-document-id',\n      childDocumentId: 'child-document-id'\n    },\n    options: {}\n  }\n   * @param documentListId\n   * @param documentId\n   * @returns\n   */\n  getDocumentInfoItem(documentListId, documentId) {\n\n    if (!documentListId) {\n      throw new Error('No documentListId or documentId provided in getDocumentInfo item');\n    }\n\n    const storedDocInfo = this.appStore.getState().formState.documentInfo[documentListId];\n    let documentInfoItem = storedDocInfo ? storedDocInfo[documentId] : null;\n    if (!documentInfoItem) {\n      documentInfoItem = {\n        documentListId,\n        documentId,\n        hierarchyInfo: {}\n      }\n    } else {\n      documentInfoItem = cloneDeep(documentInfoItem);\n    }\n\n    return documentInfoItem;\n  }\n\n  getUnsavedDocumentInfo(unsavedDocumentListId) {\n    return cloneDeep(this.appStore.getState().formState.documentInfo[unsavedDocumentListId]);\n  }\n\n  /**\n   * add a document to the list, so it will be included in the list of unsaved documents\n   * @param document the document\n   * @param unsavedDocumentListId the unsavedDocumentListId\n   */\n  addDocumentToUnsavedList(document, unsavedDocumentListId) {\n\n    if (!document || !document.documentId) {\n      throw new Error('No document or documentId provided in addDocumentToUnsavedList');\n\n    } else if (!unsavedDocumentListId) {\n      throw new Error('No unsavedDocumentListId provided in addDocumentToUnsavedList');\n\n    }\n\n    const docInfo: DocumentInfo = {\n      documentId: document.documentId,\n    };\n\n    this.appStore.dispatch(formSetDocumentInfo(unsavedDocumentListId, docInfo));\n\n    this.appStore.dispatch(formSetDocument(document));\n\n  }\n\n  /**\n   * add a template to the list\n   * @param template the template obj\n   * @param unsavedDocumentListId the unsaved list\n   * @param orgTemplateId the original template id\n   */\n  addTemplateToUnsavedList(document, template, unsavedDocumentListId, orgTemplateId) {\n\n    if (!template || !template.documentId) {\n      throw new Error('No template provided in addTemplateToUnsavedList');\n\n    } else if (!unsavedDocumentListId) {\n      throw new Error('No unsavedDocumentListId provided in addTemplateToUnsavedList');\n\n    }\n\n    const docInfo: DocumentInfo = {\n      documentId: document.documentId\n    };\n\n    const templateId = template.documentId;\n\n    // in case alt template\n    if (orgTemplateId && templateId !== orgTemplateId) {\n\n      docInfo.templateId = orgTemplateId;\n      docInfo.altTemplateId = templateId;\n\n    } else {\n\n      docInfo.templateId = templateId;\n    }\n\n    this.appStore.dispatch(formSetDocumentInfo(unsavedDocumentListId, docInfo));\n\n  }\n\n  /**\n   * get the document from the unsaved document list. The document will be set in the document parameter rather than returned\n   * so that the document directly references the value in the unsaved list\n   * @param documentResult - the document will be placed in the document parameter of documentResult. It needs to be done this\n   *                         way because if you assign to an object directly, the reference that the object points at changes\n   * @param unsavedDocumentListId the unsaved list Id\n   * @param documentId the document Id\n   */\n  getDocument(documentResult, unsavedDocumentListId, documentId) {\n\n    const formState = this.appStore.getState().formState;\n    const documents = formState.documents;\n    const docInfo: DocumentInfo = formState.documentInfo;\n\n    if (!documentResult) {\n      throw new Error('The documentResult must be passed as an object to getDocument so the document can be set under it');\n\n    } else if (!unsavedDocumentListId) {\n      throw new Error('Unsaved document list id not provided in getDocument');\n\n    } else if (!docInfo[unsavedDocumentListId]) {\n      throw new Error('GetDocument: Unsaved document list has not been initialised with id: ' + unsavedDocumentListId);\n\n    } else if (!docInfo[unsavedDocumentListId][documentId]) {\n      throw new Error('Unsaved document list does not contain document: ' + documentId);\n    }\n\n    // set the document from loaded docs in the document parameter\n    documentResult.document = cloneDeep(documents[documentId]);\n  }\n\n  /**\n   * get the template from the unsaved document list. The template will be set in the template result parameter\n   * rather than returned so that the template directly references the value in the unsaved list\n   * @param documentResult - the template will be placed in the template parameter of documentResult. It needs to\n   * be done this way because if you assign to an object directly, the reference that the object points at changes\n   * @param unsavedDocumentListId the unsaved list Id\n   * @param templateId the template Id\n   */\n  getTemplate(documentResult, unsavedDocumentListId, templateId, documentId) {\n\n    const formState = this.appStore.getState().formState;\n    const templates = formState.templates;\n    const docInfo: DocumentInfo = formState.documentInfo;\n\n    if (!documentResult) {\n      throw new Error('The documentResult must be passed as an object to getTemplate so the template can be set under it');\n\n    } else if (!unsavedDocumentListId) {\n      throw new Error('Unsaved document list id not provided in getTemplate');\n\n    } else if (!docInfo[unsavedDocumentListId]) {\n      throw new Error('GetTemplate: Unsaved document list has not been initialised with id: ' + unsavedDocumentListId);\n\n    } else if (!docInfo[unsavedDocumentListId][documentId]) {\n      throw new Error('Unsaved document list does not contain document: ' + documentId);\n    }\n\n    const docInfoItem = docInfo[unsavedDocumentListId][documentId];\n\n    if (docInfoItem.templateId === templateId || docInfoItem.altTemplateId === templateId) {\n\n      // set the template from loaded templates in the document parameter\n      documentResult.template = cloneDeep(templates[templateId]);\n    }\n\n    if (!templateId) {\n      throw new Error('Unsaved document list does not contain template: ' + templateId);\n    }\n\n  }\n\n  setDocument(unsavedDocumentListId, document) {\n\n    if (!unsavedDocumentListId) {\n      throw new Error('Unsaved document list id not provided in setDocument');\n\n    }\n\n    const docInfo: DocumentInfo = {\n      documentId: document.documentId\n    };\n\n    this.appStore.dispatch(formSetDocumentInfo(unsavedDocumentListId, docInfo));\n    this.appStore.dispatch(formSetDocument(document));\n  }\n\n\n  setTemplate(unsavedDocumentListId, documentId, template) {\n\n    if (!unsavedDocumentListId) {\n      throw new Error('Unsaved document list id not provided in setTemplate');\n\n    } else if (!template || !template.documentId) {\n      throw new Error('Template not provided in setTemplate');\n\n    }\n\n    const docInfo: DocumentInfo = {\n      templateId: template.documentId,\n      documentId\n    };\n\n    this.appStore.dispatch(formSetDocumentInfo(unsavedDocumentListId, docInfo));\n    this.appStore.dispatch(formSetDocument(template));\n  }\n\n  /**\n   * get the document from a unsaved document list.\n   * @param documentId the document Id\n   */\n  getDocumentOnly(documentId) {\n\n    return cloneDeep(this.appStore.getState().formState.documents[documentId]);\n  }\n\n  /**\n   * get the template from the unsaved document list.\n   * @param templateId the template Id\n   */\n  getTemplateOnly(templateId) {\n\n    return this.getDocumentOnly(templateId);\n  }\n\n  setDocumentListOptions(unsavedDocumentListId, documentId, key, value) {\n\n    if (!unsavedDocumentListId) {\n      throw new Error('Unsaved document list id not provided in getDocumentOptions');\n\n    }\n\n    const docInfo: DocumentInfo = {\n      documentId,\n      options: {\n        [key]: value\n      }\n    };\n\n    this.appStore.dispatch(formSetDocumentInfo(unsavedDocumentListId, docInfo));\n  }\n\n\n  getDocumentListOptions(unsavedDocumentListId, documentId) {\n\n    const docInfo: DocumentInfo = this.appStore.getState().formState.documentInfo;\n\n    if (!unsavedDocumentListId) {\n      throw new Error('Unsaved document list id not provided in getDocumentOptions');\n\n    } else if (!docInfo[unsavedDocumentListId] || !docInfo[unsavedDocumentListId][documentId] || !docInfo[unsavedDocumentListId][documentId].options) {\n      throw new Error(`getDocumentOptions: Unsaved document list has not been initialised with id: ${unsavedDocumentListId} and docId: ${documentId}`);\n    }\n\n    return docInfo[unsavedDocumentListId][documentId].options;\n  }\n\n  getDocumentOptionKey(unsavedDocumentListId, documentId, optionKey) {\n\n    const options = this.getDocumentListOptions(unsavedDocumentListId, documentId);\n\n    return options[optionKey];\n  }\n\n  /**\n   * Get the list of pair of document and template for each form. The result should be:\n  [{\n    document: document1,\n    template: template1\n  },\n  {\n    document: document2,\n    template: template2\n  }\n  ]\n   * @param unsavedDocumentListId\n   * @returns\n   */\n  getUnsavedDocumentDatas(unsavedDocumentListId) {\n\n    const documentDatas = [];\n\n    const documentInfo = this.appStore.getState().formState.documentInfo[unsavedDocumentListId];\n    const documents = this.appStore.getState().formState.documents;\n    const templates = this.appStore.getState().formState.templates;\n\n    const documentIds = Object.keys(documentInfo);\n    documentIds.forEach(documentId => {\n\n      const documentInfoItem = documentInfo[documentId];\n\n      if (documentInfoItem?.loaded) {\n\n        const document = cloneDeep(documents[documentId]);\n    \n        const templateId = documentInfoItem.overrideTemplateId ? documentInfoItem.overrideTemplateId : documentInfoItem.templateId;\n        const template = cloneDeep(templates[templateId]);\n    \n        documentDatas.push({\n          document,\n          template\n        });\n      }\n\n    });\n\n    return documentDatas;\n  }\n\n  /**\n   * get all the unsaved documents inside the provided document list\n   * @param unsavedDocumentListId - the id of the list to get the loaded docs for\n   */\n  getUnsavedDocuments(unsavedDocumentListId) {\n\n    const documentInfo = this.appStore.getState().formState.documentInfo[unsavedDocumentListId];\n\n    const documents = this.appStore.getState().formState.documents;\n\n    const unsavedDocuments = [];\n\n    const documentIds = Object.keys(documentInfo);\n    documentIds.forEach(documentId => {\n      const doc = cloneDeep(documents[documentId]);\n      unsavedDocuments.push(doc);\n    });\n\n    return unsavedDocuments;\n  }\n\n  getUnsavedDocumentId(unsavedDocumentListId) {\n    const docInfo: DocumentInfo = this.appStore.getState().formState.documentInfo;\n\n    if (!unsavedDocumentListId) {\n      throw new Error('Unsaved document list id not specified when getting loaded documents');\n\n    } else if (!docInfo[unsavedDocumentListId]) {\n      throw new Error('Unsaved documents not found with id ' + unsavedDocumentListId);\n    }\n\n    return this.currentDocumentInfoService.getMainDocumentIdFromList(unsavedDocumentListId);\n  }\n\n  /**\n   * get all the unsaved templates inside the privided document list\n   * @param unsavedDocumentListId - the id of the document list to get all the loaded templates\n   */\n  getUnsavedTemplates(unsavedDocumentListId) {\n\n    const documentInfo = this.appStore.getState().formState.documentInfo[unsavedDocumentListId];\n    const unsavedTemplates = [];\n    const templates = this.appStore.getState().formState.templates;\n    const documentIds = Object.keys(documentInfo);\n    documentIds.forEach(documentId => {\n      const documentInfoItem = documentInfo[documentId];\n      const templateId = documentInfoItem.templateId;\n      const doc = cloneDeep(templates[templateId]);\n      unsavedTemplates.push(doc);\n    });\n\n    return unsavedTemplates;\n\n  }\n\n  getUnsavedTemplate(documentId, unsavedDocumentListId) {\n    const docInfo: DocumentInfo = this.appStore.getState().formState.documentInfo;\n\n    if (!docInfo) {\n      console.warn('Document infor in app state seems not initialized yet.');\n      return null;\n    }\n\n    if (!unsavedDocumentListId) {\n      console.warn('Unsaved document list id not specified when getting unsaved template');\n      return null;\n    }\n\n    if (!documentId) {\n      console.warn('Unsaved document id not specified when getting unsaved template');\n      return null;\n    }\n\n    if (!docInfo[unsavedDocumentListId] || !docInfo[unsavedDocumentListId][documentId]) {\n      console.warn(`Unsaved template not found with document list id: ${unsavedDocumentListId} and documentId: ${documentId}`);\n      return null;\n    }\n\n    const overrideTemplateId = docInfo[unsavedDocumentListId][documentId].overrideTemplateId;\n    const templateId = overrideTemplateId ? overrideTemplateId : docInfo[unsavedDocumentListId][documentId].templateId;\n\n    return cloneDeep(this.appStore.getState().formState.templates[templateId]);\n  }\n\n  removeDocumentList(unsavedDocumentListId) {\n\n    this.appStore.dispatch(formResetDocumentInfo(unsavedDocumentListId));\n  }\n\n  /**\n   * Get parent document and template\n   * @param unsavedDocumentListId\n   * @param childDocumentId\n   */\n  getParentData(unsavedDocumentListId, childDocumentId) {\n\n    if (!unsavedDocumentListId) {\n      throw new Error('Unsaved document list id not specified when getting unsaved parent data');\n    }\n\n    if (!childDocumentId) {\n      throw new Error('Unsaved child document id not specified when getting unsaved parent data');\n    }\n\n    const documents = this.appStore.getState().formState.documents;\n    const templates = this.appStore.getState().formState.templates;\n    const docInfo: DocumentInfo = this.appStore.getState().formState.documentInfo[unsavedDocumentListId];\n\n    if (docInfo && docInfo[childDocumentId]) {\n      const parentDocId = docInfo[childDocumentId].hierarchyInfo?.parentDocumentId;\n      if (parentDocId) {\n        const parentDoc = cloneDeep(documents[parentDocId]);\n\n        const parentTplId = docInfo[parentDocId].overrideTemplateId ? docInfo[parentDocId].overrideTemplateId : docInfo[parentDocId].templateId;\n        const parentTpl = cloneDeep(templates[parentTplId]);\n\n        return {\n          parentDoc,\n          parentTpl\n        } as any;\n      }\n    }\n\n    return {};\n  }\n\n  setParentInfo(documentContext) {\n    const hierarchyInfo = documentContext.formParameters.hierarchyInfo;\n    const parentDocumentId = hierarchyInfo?.parentDocumentId;\n    const parentDocument = this.appStore.getState().formState.documents[parentDocumentId];\n    documentContext.parentDocument = parentDocument;\n    if (parentDocument) {\n      documentContext.parentTemplate = this.appStore.getState().formState.templates[parentDocument.systemHeader.templateId];\n    }\n  }\n\n  setChildInfo(documentContext) {\n    const hierarchyInfo = documentContext.formParameters.hierarchyInfo;\n    const childDocumentId = hierarchyInfo?.childDocumentId;\n    const childDocument = this.appStore.getState().formState.documents[childDocumentId];\n    documentContext.childDocument = childDocument;\n    if (childDocument) {\n      documentContext.childTemplate = this.appStore.getState().formState.templates[childDocument.systemHeader.templateId];\n    }\n  }\n\n  /**\n   * Get child document and template\n   * @param unsavedDocumentListId\n   * @param documentId\n   */\n  getChildData(unsavedDocumentListId, documentId) {\n\n    if (!unsavedDocumentListId) {\n      throw new Error('Unsaved document list id not specified when getting unsaved child data');\n    }\n\n    if (!documentId) {\n      throw new Error('Unsaved child document id not specified when getting unsaved child data');\n    }\n\n    const documents = this.appStore.getState().formState.documents;\n    const templates = this.appStore.getState().formState.templates;\n    const docInfo: DocumentInfo = this.appStore.getState().formState.documentInfo[unsavedDocumentListId];\n\n    if (docInfo && docInfo[documentId]) {\n      const childDocId = docInfo[documentId].hierarchyInfo?.childDocumentId;\n      if (childDocId) {\n        const childDoc = cloneDeep(documents[childDocId]);\n\n        const childTplId = docInfo[childDocId].overrideTemplateId ? docInfo[childDocId].overrideTemplateId : docInfo[childDocId].templateId;\n        const childTpl = cloneDeep(templates[childTplId]);\n\n        return {\n          childDoc,\n          childTpl\n        } as any;\n\n      }\n    }\n\n    return {};\n  }\n\n  /**\n     * store a document hierarchy info to a list. This will be needed when retrieve information to load a child\n     * document from a parent one\n     * @param hierarchyInfo (parentDocumentId and childDocumentId)\n     * @param unsavedDocumentListId the unsaved list Id\n     */\n  updateDocumentListInfo(documentInfo: DocumentInfo, unsavedDocumentListId) {\n\n    this.appStore.dispatch(formSetDocumentInfo(unsavedDocumentListId, documentInfo));\n\n  }\n\n  clearDocuments() {\n    // this.documents = {};\n  }\n\n  getAllLoadedDocs(excludedOptions?) {\n\n    const docInfo: DocumentInfo = this.appStore.getState().formState.documentInfo;\n    const documents = this.appStore.getState().formState.documents;\n    const docIds = Object.keys(documents);\n\n    const loadedDocs = [];\n\n    const unsavedDocumentListIds = Object.keys(docInfo);\n\n    unsavedDocumentListIds.forEach(function (unsavedDocumentListId) {\n\n      const documentIds = Object.keys(docInfo[unsavedDocumentListId]);\n\n      documentIds.forEach(documentId => {\n        const options = docInfo[unsavedDocumentListId][documentId].options;\n\n        docIds.forEach(function (docId) {\n\n          const doc = cloneDeep(documents[docId]);\n          if (excludedOptions) {\n            if (!UtilDocument.hasIntersect(options[docId], excludedOptions)) {\n              loadedDocs.push(doc);\n            }\n          } else {\n            loadedDocs.push(doc);\n          }\n\n        });\n      });\n\n    });\n\n    return loadedDocs;\n  }\n\n  getAllLoadedDocumentLists() {\n    const docInfo: DocumentInfo = this.appStore.getState().formState.documentInfo;\n    const documents = this.appStore.getState().formState.documents;\n\n    let result = [];\n\n    const unsavedDocumentListIds = Object.keys(docInfo);\n\n    unsavedDocumentListIds.forEach(function (unsavedDocumentListId) {\n\n      const documentIds = Object.keys(docInfo[unsavedDocumentListId]);\n\n      for (let index = 0; index < documentIds.length; index++) {\n        const documentId = documentIds[index];\n        if (documents[documentId] && docInfo[unsavedDocumentListId][documentId] && docInfo[unsavedDocumentListId][documentId].loaded) {\n\n          result.push(unsavedDocumentListId);\n\n          break;\n\n        }\n      }\n\n    });\n\n    return result;\n    \n  }\n\n  documentIsLoaded(documentId) {\n\n    const docInfo: DocumentInfo = this.appStore.getState().formState.documentInfo;\n    const documents = this.appStore.getState().formState.documents;\n\n    let result = false;\n\n    const unsavedDocumentListIds = Object.keys(docInfo);\n\n    unsavedDocumentListIds.forEach(function(unsavedDocumentListId) {\n\n      if (documents[documentId] && docInfo[unsavedDocumentListId][documentId] && docInfo[unsavedDocumentListId][documentId].loaded) {\n\n        result = true;\n      }\n    });\n\n    return result;\n  }\n\n  isDocumentsDefined(unsavedDocumentListId) {\n    return !!this.appStore.getState().formState.documentInfo[unsavedDocumentListId];\n  }\n\n  getHierarchyInfo(unsavedDocumentListId, documentId) {\n    const documentInfo = this.appStore.getState().formState.documentInfo;\n    if (documentInfo && documentInfo[unsavedDocumentListId] && documentInfo[unsavedDocumentListId][documentId]) {\n\n      return cloneDeep(documentInfo[unsavedDocumentListId][documentId].hierarchyInfo);\n\n    }\n\n    return null;\n  }\n\n  resetToOrgDocument(documentId, unsavedDocumentListId?) {\n    this.appStore.dispatch(formResetToOrgDocument(documentId, unsavedDocumentListId));\n  }\n\n  resetDocument(documentId, unsavedDocumentListId?) {\n    this.resetToOrgDocument(documentId, unsavedDocumentListId);\n  }\n\n  resetTemplateComponent(templateId, unsavedDocumentListId?) {\n    this.appStore.dispatch(formResetTemplateComponentDefinition(templateId, unsavedDocumentListId));\n  }\n\n}\n","import { Injectable, inject } from '@angular/core';\nimport { IApplicationState } from '../../redux/state/application.state';\nimport { SharedConstants, DocumentInfo, FormParameters } from '@formbird/types';\nimport { UtilDocumentId, UtilDocument, UtilError, UtilType, UtilHttpStatus } from '@formbird/shared';\nimport { extend } from 'lodash';\nimport { cloneDeep } from 'es-toolkit';\nimport { ClientAccessService } from '../access/client-access.service';\nimport { DataService } from '../data/data.service';\nimport { UnsavedDocumentService } from './unsaved-document.service';\nimport { OfflineStatusService } from './../offline-status/offline-status.service';\nimport { LocalStorageService } from '../storage/local-storage/local-storage.service';\nimport { KeyValueStorageService } from '../key-value-storage/key-value-storage.service';\n\nimport {\n  formClearDocuments,\n  formSetDocument,\n  formSetDocumentInfo,\n  formSetOrgDocument,\n  formSetDisableSaveFieldDocument,\n  formSetTemplate,\n  formSetAltTemplateInfo\n} from '../../redux/actions/form-new.actions';\nimport { AppStore } from '../../redux/store/app.store';\n\nconst logger = console;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DocumentService {\n  private dataService = inject(DataService);\n  private clientAccessService = inject(ClientAccessService);\n  private unsavedDocumentService = inject(UnsavedDocumentService);\n  private localStorageService = inject(LocalStorageService);\n  private appStore = inject<AppStore<IApplicationState>>(AppStore);\n  private offlineStatusService = inject(OfflineStatusService);\n\n\n  private restoreWIPDocument;\n\n  /**\n   * Return the cached document that can be the document getting from DB or successful created document on form\n   * @param documentId the document Id\n   * @returns the existing document\n   */\n  getExistingDocument(documentId) {\n\n    return cloneDeep(this.appStore.getState().formState.orgDocuments[documentId]);\n  }\n\n  private callbackResult(callback, result) {\n    if (typeof callback === 'function') {\n      callback(result);\n    }\n  }\n\n  private async execFindDocument(document, callback): Promise<any> {\n\n    let hasAccess = this.clientAccessService.checkAccess(document, SharedConstants.OPERATION_TYPE_READ);\n    if (hasAccess) {\n\n      // return the cached document in a callback and promise\n      this.callbackResult(callback, document);\n\n      return document;\n\n    } else {\n\n      if (document.systemHeader.systemType === SharedConstants.SYSTEM_TYPE_TEMPLATE\n        && document.altTemplateIds && document.altTemplateIds.length !== 0) {\n\n        const docIds = [];\n        for (let i = 0; i < document.altTemplateIds.length; i++) {\n          docIds.push(document.altTemplateIds[i]);\n        }\n\n        const query = {\n          'query': {\n            'bool': {\n              'must': [\n                { 'terms': { 'documentId': docIds } }\n              ]\n            }\n          }\n        };\n\n        const results = await this.dataService.findByElastic(query);\n\n        let accessibleDocument;\n        const templates = results.data.hits.hits;\n\n        for (let i = 0; i < templates.length; i++) {\n          const result = templates[i]._source;\n\n          hasAccess = this.clientAccessService.checkAccess(result, SharedConstants.OPERATION_TYPE_READ);\n\n          if (hasAccess) {\n\n            logger.info('Returning Alt Template');\n\n            accessibleDocument = result;\n\n            break;\n          }\n        }\n\n        if (accessibleDocument) {\n\n          this.callbackResult(callback, accessibleDocument);\n\n          return Promise.resolve(accessibleDocument);\n\n        }\n\n      }\n\n      return Promise.reject(UtilError.createForbiddenError(document, SharedConstants.OPERATION_TYPE_READ));\n\n    }\n  }\n\n  /**\n   * return the document using a promise. This will be used to load documents into the data that is bound to,\n   * before determining whether the document is a template or other document\n   * @param documentId\n   * @param options\n   * @param callback\n   */\n  async getDocumentOnly(documentId, options?, callback?): Promise<any> {\n\n    // if the document is already in the cache, return the document from the cache, otherwise get it from the\n    // data service\n    const document = this.getExistingDocument(documentId);\n\n    if (document) {\n\n      if (document.systemHeader && document.systemHeader.deleted) {\n\n        const deletedMsg = 'Document has been deleted';\n        return Promise.reject(UtilError.createError(deletedMsg, UtilError.DELETED_ERROR));\n\n      } else {\n\n        return await this.execFindDocument(document, callback);\n\n      }\n\n    } else {\n\n      const data = await this.dataService.getDocument(documentId);\n\n      if (data.systemHeader && data.systemHeader.deleted) {\n\n        const deletedMsg = 'Document has been deleted';\n        return Promise.reject(UtilError.createError(deletedMsg, UtilError.DELETED_ERROR));\n\n      } else {\n\n        this.appStore.dispatch(formSetOrgDocument(data));\n\n        return await this.execFindDocument(data, callback);\n      }\n    }\n\n  }\n\n  async getTemplateAndDocument(id: string, templateId?: string) {\n    const result = await this.dataService.getTemplateAndDocument(id, templateId);\n    const { document, template } = result;\n\n    if (document) {\n      let versionId = null;\n      if (document.systemHeader.currentVersion === false || (id !== document.documentId && id === document.systemHeader.versionId)) {\n        versionId = document.systemHeader.versionId;\n      }\n\n      this.setLoadedDocumentOnly(result.document, versionId);\n    }\n\n    if (template) {\n      this.setLoadedTemplateOnly(template);\n    }\n\n    return result;\n  }\n\n  getLoadedDocument(documentId: string) {\n    return cloneDeep(this.appStore.getState().formState.documents[documentId]);\n  }\n\n  getLoadedTemplate(templateId: string) {\n    return cloneDeep(this.appStore.getState().formState.templates[templateId]);\n  }\n\n  getAltTemplate(documentId: string) {\n    const templateId = this.appStore.getState().formState.altTemplateInfo[documentId];\n    return this.getLoadedTemplate(templateId);\n  }\n\n  getloadedTemplateForDoc(document, formParameters) {\n\n    const state = this.appStore.getState().formState;\n    const documentId = document.documentId;\n    let templateId;\n\n    if (formParameters && formParameters.overrideTemplateId) {\n      templateId = formParameters.overrideTemplateId;\n\n    } else {\n      const documentInfoItem = state.documentInfo[formParameters.unsavedDocumentListId];\n      const docInfo = documentInfoItem[documentId];\n      templateId = docInfo?.templateId;\n    }\n\n    if (!templateId) {\n      templateId = document.systemHeader.templateId;\n    }\n\n    if (templateId) {\n      return cloneDeep(state.templates[templateId]);\n    }\n\n  }\n\n  /**\n   * get the document\n   * @param documentId the document Id\n   * @param documentData - the result. The result will be put under a data element in documentData so it can\n   * be bound to\n   * @returns promise\n   */\n  async getDocument(documentId: string, documentData: any): Promise<any> {\n\n    if (!documentData || typeof documentData !== 'object') {\n      const msg = 'The documentData needs to be an object so data can be set under it, which allows it to be bound to';\n      throw UtilError.createError(msg);\n    }\n\n    await this.getDocumentOnly(documentId);\n\n    let document = this.getExistingDocument(documentId);\n\n    if (document) {\n      documentData.document = document;\n\n    } else {\n\n      document = await this.dataService.getDocument(documentId);\n\n      this.appStore.dispatch(formSetDocument(document));\n\n      documentData.document = document;\n    }\n\n    return document;\n\n  }\n\n  private setInitialValues(document, template, formParameters) {\n    const _self  = this;\n    let hasInitialized = false;\n\n    if (template && template.components && template.components.length) {\n      if (!document) {\n        document = {};\n      }\n\n      const documentId = UtilDocument.isNew(document) ? formParameters.selectedDocumentId : document.documentId;\n      const initialDataKey = 'initialData:' + documentId;\n\n      let initialData = null;\n      try {\n\n        initialData = JSON.parse(this.localStorageService.getItem(initialDataKey));\n        if (initialData && initialData.documentId && UtilDocument.isNew(document)) {\n          document.documentId = initialData.documentId;\n        }\n        hasInitialized = initialData && Object.keys(initialData).length > 0;\n        _self.restoreWIPDocument = {initialData, hasInitialized};\n      } catch (e) {\n      }\n\n      localStorage.removeItem(initialDataKey);\n\n      template.components.forEach(function(component) {\n        \n        if (!component.name) {\n          return;\n        }\n\n        if (!UtilType.hasValue(document[component.name])) {\n\n          if (UtilType.hasValue(component.defaultValue)) {\n            document[component.name] = component.defaultValue;\n          }\n        }\n      });\n\n    }\n\n    return hasInitialized;\n  }\n\n  /**\n   * initialise a new document. The documentId will be set straight away so it can be passed through to child\n   * docs without waiting for the main document to be saved. This allows the save to be performed in one operation\n   * and reduces the chance of the child doc being saved without having the parent id set\n   * @param documentData the result inside documentData object\n   */\n  private initialiseNewDocument(documentData, template, formParameters) {\n\n    if (documentData && template) {\n\n      // set the isNew value to indicate that the document is a new document being created\n      documentData.isNew = true;\n\n      const newDocument = this.setInitialDocument(template, formParameters);\n      if (!newDocument.documentId){\n        newDocument.documentId = UtilDocumentId.generateId();\n      }\n\n      if (documentData.document) {\n        extend(newDocument, documentData.document);\n      }\n\n      this.updateDocumentData(documentData, newDocument, template, formParameters);\n\n      logger.info('Initialised new document: ' + newDocument.documentId);\n\n    } else {\n\n      logger.error('Template not provided when initialising new document');\n    }\n  }\n\n  /**\n   * set the document in unsaved loaded docs and set the document to documentData.document. This will be used\n   * to check for modifications and on saving the documents\n   * @param document the data\n   * @param unsavedDocumentListId the unsaved document list Id\n   */\n  private setInLoadedDocs(document, unsavedDocumentListId) {\n\n    if (document && document.documentId) {\n\n      // copy the document and set to original documents list so that the loaded doc on form isn't a reference to the original\n      this.unsavedDocumentService.addDocumentToUnsavedList(document, unsavedDocumentListId);\n      this.setOriginalDocumentOnly(cloneDeep(document));\n\n    } else {\n\n      logger.error('Attempting to add null or undefined document to loaded docs');\n    }\n  }\n\n  /**\n   * set the template in unsaved loaded templates and set the template to documentData.template.This will be\n   * used to store modified version of the template by rules\n   * associate to its document.\n   * @param template the data\n   * @param unsavedDocumentListId the unsaved document list Id\n   * @param orgTemplateId the org template\n   */\n  private setInLoadedTemplates(document, template, unsavedDocumentListId, orgTemplateId?) {\n\n    if (template && template.documentId) {\n\n      // copy the template and set to original documents list so that the loaded template isn't a reference to the original\n      this.unsavedDocumentService.addTemplateToUnsavedList(document, template, unsavedDocumentListId, orgTemplateId);\n\n    } else {\n\n      logger.error('Attempting to add null or undefined template to loaded templates');\n    }\n  }\n\n  private updateDocumentData(documentData, document, template, formParameters) {\n\n    documentData.template = cloneDeep(template);\n    documentData.templateId = template.documentId;\n    if (formParameters.overrideTemplateId) {\n      // set the override template id in the current document if specified, so that the override\n      // template will be used in the save\n      documentData.overrideTemplateId = formParameters.overrideTemplateId;\n    }\n\n    documentData.document = cloneDeep(document);\n    documentData.documentId = document.documentId;\n\n  }\n\n  private updateDocumentInfoProperties(unsavedDocumentListId, documentData, formParameters) {\n\n    const docInfo: DocumentInfo = {\n      documentListId: unsavedDocumentListId,\n      documentId: documentData.document.documentId,\n      isMainDoc: formParameters.isMainDoc,\n      isNew: documentData.isNew,\n      options: {\n        formParameters\n      }\n    };\n\n    // set the override template id in the current document if specified, so that the override\n    // template will be used in the save\n    if (formParameters.overrideTemplateId) {\n      docInfo.overrideTemplateId = formParameters.overrideTemplateId;\n    }\n\n    this.appStore.dispatch(formSetDocumentInfo(unsavedDocumentListId, docInfo));\n  }\n\n  private getTemplateForDocumentErrorDetails(templateReturnStatus,templateId, templateError ) {\n      if (templateReturnStatus === UtilHttpStatus.NOT_FOUND) {\n        return UtilError.createError('Template for document not found: ' + templateId);\n      } else if (templateReturnStatus === UtilHttpStatus.FORBIDDEN) {\n        return UtilError.createError(templateError.message);\n      } else if (templateError?.name === UtilError.DELETED_ERROR || templateReturnStatus === UtilHttpStatus.GONE || templateError?.type === SharedConstants.ERROR_TYPE_GONE) {\n        return UtilError.createError('Template for document has been deleted: ' + templateId);\n      } else if (templateError) {\n        return UtilError.createError('Error getting template: ' + templateError.message ? templateError.message : templateError);\n      } else {\n        return UtilError.createError('Error getting template for document : ' + templateId);\n      }\n\n  }\n\n  // get the template for the document. If it is a template, return the document itself, otherwise return the\n  // template matching the systemHeader.templateId of the document\n  async getTemplateForDocument(formParameters: FormParameters, documentData): Promise<any> {\n\n    const documentId = formParameters.selectedDocumentId;\n    const unsavedDocumentListId = formParameters.unsavedDocumentListId;\n    const overrideTemplateId = formParameters.overrideTemplateId;\n\n    try {\n      this.restoreWIPDocument = null;\n      if (!documentData || typeof documentData !== 'object') {\n\n        const msg = 'documentData needs to be an object so data can be set under it, which allows it to be bound to';\n        logger.error(msg);\n\n        throw UtilError.createError(msg);\n\n      }\n\n      let document  = this.getLoadedDocument(documentId);\n\n      let templateId = overrideTemplateId;\n      if (!templateId && document && document.systemHeader && document.systemHeader.templateId) {\n        templateId = document.systemHeader.templateId;\n      } else if (!templateId) {\n        templateId = documentId;\n      }\n\n      let template = this.getLoadedTemplate(templateId);\n      if (!template && templateId !== documentId) {\n        template = this.getAltTemplate(documentId);\n      }\n\n      if (!template) {\n        const returnObj = await this.getTemplateAndDocument(documentId, overrideTemplateId);\n        document = returnObj.document;\n        template = returnObj.template;\n        if (returnObj.templateReturnStatus !== UtilHttpStatus.OK) {\n          let templateId = overrideTemplateId;\n          if (!templateId && document && document.systemHeader && document.systemHeader.templateId) {\n            templateId = document.systemHeader.templateId;\n          }\n          throw this.getTemplateForDocumentErrorDetails(returnObj.templateReturnStatus, templateId, returnObj.templateError);\n        }\n      }\n\n      if (!overrideTemplateId && document?.systemHeader?.systemType === SharedConstants.SYSTEM_TYPE_TEMPLATE) {\n        template = document;\n        document = null;\n      }\n\n      if (document) {\n        this.appStore.dispatch(formSetOrgDocument(document));\n      }\n      if (template) {\n        this.appStore.dispatch(formSetOrgDocument(template));\n      }\n      template = this.updateDisableSaveTemplate(documentData.isNew, template, document);\n\n      if (!document) {\n\n        documentData.isNew = true;\n\n        // initialise the document as a new document and set into loaded docs\n        // Set document into documentData as well\n        this.initialiseNewDocument(documentData, template, formParameters);\n        // add the document to loaded docs in store, so it will be saved and have dirty checking applied\n        this.setInLoadedDocs(cloneDeep(documentData.document), unsavedDocumentListId);\n        // add the template to loaded docs into store, so it will be modified and have field mandatory/visible/disable checking applied\n        this.setInLoadedTemplates(documentData.document, documentData.template, unsavedDocumentListId);\n\n      } else {\n\n        documentData.isNew = false;\n\n        document = cloneDeep(document);\n\n        // now set template into loaded templates and assign the its data to the documentData.template\n        this.setInLoadedTemplates(document, template, unsavedDocumentListId);\n        // update static values from template into existing document\n        this.setInitialValues(document, template, formParameters);\n        // add the document to the unsaved loaded docs so that it can be compared with the\n        // original in this DocumentService.document.docs when saving\n        this.setInLoadedDocs(document, unsavedDocumentListId);\n        this.updateDocumentData(documentData, document, template, formParameters);\n      }\n\n      this.updateDocumentInfoProperties(unsavedDocumentListId, documentData, formParameters);\n      return Promise.resolve({\"restoreWIPDocument\" : this.restoreWIPDocument});\n    } catch (err) {\n      let errorMsg;\n      if (err.name === UtilError.NOT_FOUND_ERROR) {\n        const isOffline = !this.offlineStatusService.isConnected() && this.offlineStatusService.isOfflineMode();\n        errorMsg = isOffline ? `Device is offline and document ${documentId} not found` : `Document not found: ${documentId}`;\n      } else if (err.name === UtilError.FORBIDDEN_ERROR) {\n        errorMsg = err.message;\n      } else if (err.name === UtilError.DELETED_ERROR) {\n        errorMsg = 'Document was deleted: ' + documentId;\n      } else {\n        errorMsg = 'Error getting template or document: ' + err.message ? err.message : err;\n      }\n\n      logger.error(errorMsg);\n\n      return Promise.reject(UtilError.createError(errorMsg, err.name));\n\n      // throw new Error(\"Error getting template and document: \" + err.message);\n    }\n  }\n\n  async getTemplateForDocument_OLD(formParameters: FormParameters, documentData): Promise<any> {\n\n    const targetDocumentId = formParameters.selectedDocumentId;\n    const unsavedDocumentListId = formParameters.unsavedDocumentListId;\n    const overrideTemplateId = formParameters.overrideTemplateId\n    const _self = this;\n\n    if (!documentData || typeof documentData !== 'object') {\n\n      const msg = 'documentData needs to be an object so data can be set under it, which allows it to be bound to';\n      logger.error(msg);\n\n      return Promise.reject(UtilError.createError(msg));\n\n    } else {\n\n      try {\n        const options = {};\n        const data = cloneDeep(await _self.getDocumentOnly(targetDocumentId, options));\n\n        if (data) {\n\n          if (data.systemHeader && data.systemHeader.systemType === SharedConstants.SYSTEM_TYPE_TEMPLATE && !overrideTemplateId) {\n\n            documentData.isNew = true;\n\n            const template = _self.updateDisableSaveTemplate(documentData.isNew, data, documentData.document);\n\n            // initialise the document as a new document and set into loaded docs\n            // Set document into documentData as well\n            _self.initialiseNewDocument(documentData, template, formParameters);\n\n            // add the document to loaded docs in store, so it will be saved and have dirty checking applied\n            _self.setInLoadedDocs(cloneDeep(documentData.document), unsavedDocumentListId);\n\n            // add the template to loaded docs into store, so it will be modified and have field mandatory/visible/disable checking applied\n            _self.setInLoadedTemplates(documentData.document, documentData.template, unsavedDocumentListId);\n\n            _self.updateDocumentInfoProperties(unsavedDocumentListId, documentData, formParameters);\n\n            return Promise.resolve();\n\n          } else {\n\n            // use the override template id if specified, otherwise get the templateId from the document systemHeader\n            let templateId = overrideTemplateId;\n\n            if (!templateId && data.systemHeader && data.systemHeader.templateId) {\n              templateId = data.systemHeader.templateId;\n            }\n\n            if (templateId) {\n\n              try {\n\n                documentData.isNew = false;\n\n                // get the template for the document\n                let template = await _self.getDocumentOnly(templateId, options);\n\n                template = _self.updateDisableSaveTemplate(documentData.isNew, template, data);\n\n                const document = data;\n\n                // update static values from template into existing document\n                _self.setInitialValues(document, template, formParameters);\n\n                // add the document to the unsaved loaded docs so that it can be compared with the\n                // original in this DocumentService.document.docs when saving\n                _self.setInLoadedDocs(document, unsavedDocumentListId);\n\n                // now set template into loaded templates and assign the its data to the documentData.template\n                _self.setInLoadedTemplates(document, template, unsavedDocumentListId, templateId);\n\n                _self.updateDocumentData(documentData, document, template, formParameters);\n\n                _self.updateDocumentInfoProperties(unsavedDocumentListId, documentData, formParameters);\n\n                return Promise.resolve();\n\n              } catch (err) {\n\n                let errorMsg;\n                if (err.name === UtilError.NOT_FOUND_ERROR) {\n                  errorMsg = 'Template for document not found: ' + templateId;\n                } else if (err.name === UtilError.FORBIDDEN_ERROR) {\n                  errorMsg = err.message;\n                } else if (err.name === UtilError.DELETED_ERROR) {\n                  errorMsg = 'Template for document has been deleted: ' + templateId;\n                } else {\n                  errorMsg = 'Error getting template: ' + err.message ? err.message : err;\n                }\n\n                logger.error(errorMsg);\n\n                return Promise.reject(UtilError.createError(errorMsg, err.name));\n              }\n\n            } else {\n\n              const errorMsg = 'No Template for document found by override template id or ' +\n                'systemHeader.templateId: ' + targetDocumentId;\n              logger.error(errorMsg);\n\n              return Promise.reject(UtilError.createError(errorMsg));\n            }\n          }\n\n        } else {\n\n          const message = 'Document not found: ' + targetDocumentId;\n          logger.error(message);\n          return Promise.reject(UtilError.createError(message));\n        }\n\n      } catch (err) {\n        let error;\n\n        if (err.name === UtilError.NOT_FOUND_ERROR) {\n          error = UtilError.createError('Document not found: ' + targetDocumentId, err.name);\n        } else if (err.name === UtilError.FORBIDDEN_ERROR) {\n          error = err;\n        } else if (err.name === UtilError.DELETED_ERROR) {\n          error = UtilError.createError('Document was deleted: ' + targetDocumentId, err.name);\n        } else {\n          error = UtilError.createError(\n            'Error getting document to determine template: ' +\n            err.message ? err.message : err, err.name);\n\n          if (err.statusText) {\n            error.status = err.status;\n            error.statusText = err.statusText;\n          }\n\n        }\n\n        return Promise.reject(error);\n      }\n    }\n  }\n\n  private updateDisableSaveTemplate(isNew, template, document?) {\n\n    const canCreate = this.clientAccessService.checkAccess(template, SharedConstants.OPERATION_TYPE_CREATE);\n    const canUpdate = this.clientAccessService.checkAccess(document, SharedConstants.OPERATION_TYPE_UPDATE);\n\n    template = cloneDeep(template);\n\n    if ((isNew && !canCreate) || (!isNew && !canUpdate)) {\n\n      if (template.components) {\n\n        for (let i = 0; i < template.components.length; i++) {\n\n          if (!template.components[i].disableSave) {\n\n            template.components[i].enabled = false;\n\n          }\n        }\n\n      }\n    }\n\n    this.setLoadedTemplateOnly(template);\n\n    return template;\n  }\n\n  /**\n   * return the template for the document passed in\n   * @param doc - the document to get the template for\n   * @returns the template object\n   */\n  getTemplateFromDoc(doc) {\n\n    if (doc && doc.systemHeader && doc.systemHeader.templateId) {\n\n      return this.getLoadedTemplate(doc.systemHeader.templateId);\n\n    } else {\n\n      logger.warn('No template specified for document in systemHeader');\n    }\n\n    return null;\n  }\n\n  setLoadedTemplateOnly(tpl, versionId?) {\n    this.appStore.dispatch(formSetTemplate(tpl, versionId));\n  }\n\n  setAltTemplateInfo(documentId, templateId) {\n    this.appStore.dispatch(formSetAltTemplateInfo(documentId, templateId));\n  }\n\n  setLoadedDocumentOnly(doc, versionId?) {\n    this.appStore.dispatch(formSetDocument(doc, versionId));\n  }\n\n  setOriginalDocumentOnly(doc, versionId?) {\n    this.appStore.dispatch(formSetOrgDocument(doc, versionId));\n  }\n\n  /**\n   * reset original doc to their clean state, with the latest copy of the original doc, so that any changes in\n   * updates can be detected, also put new document after created successful on form.\n   * @param doc - the doc to reset\n   */\n  resetOriginalDocument(doc) {\n\n    if (doc) {\n\n      this.setLoadedDocumentOnly(doc);\n      this.setOriginalDocumentOnly(doc);\n    }\n  }\n\n  resetLoadedTemplate(templateId) {\n    const template = this.appStore.getState().formState.orgDocuments[templateId];\n    if (template) {\n      this.setLoadedTemplateOnly(template);\n    }\n  }\n\n  /**\n   * reset original version to their clean state, with the latest copy of the original doc, so that any changes in\n   * updates can be detected, also put new document after created successful on form.\n   * @param version - the version to reset\n   */\n  resetOriginalVersion(version) {\n\n    if (version) {\n\n      this.setLoadedDocumentOnly(version, version.systemHeader.versionId);\n      this.setOriginalDocumentOnly(version, version.systemHeader.versionId);\n    }\n  }\n\n  clearDocuments() {\n\n    this.appStore.dispatch(formClearDocuments());\n\n  }\n\n  allDocuments() {\n\n    const storedDocuments = this.appStore.getState().formState.documents;\n    const documents = [];\n    const keys = Object.keys(storedDocuments);\n\n    keys.forEach(key => {\n      documents.push(cloneDeep(storedDocuments[key]));\n    });\n\n    return documents;\n  }\n\n  getDocuments() {\n\n    return this.allDocuments();\n  }\n\n  getOrgDocuments() {\n    return this.appStore.getState().formState.orgDocuments;\n  }\n\n  setInitialDocument(template, formParameters) {\n    const systemType = template.systemTypeOverride ? template.systemTypeOverride : SharedConstants.SYSTEM_TYPE_DOCUMENT;\n\n    const newDocument: any = {\n      systemHeader: {\n        templateId: template.documentId,\n        systemType: systemType\n      }\n    };\n\n    this.setInitialValues(newDocument, template, formParameters);\n\n    return newDocument;\n  }\n\n  setDisableSaveFieldDocument(document, template) {\n    const key = document.documentId;\n    const value = {};\n    if (template && template.components && template.components.length) {\n      template.components.forEach(tplItem => {\n        if (tplItem.disableSave === true) {\n          value[tplItem.name] = document[tplItem.name];\n        }\n      });\n    }\n    this.appStore.dispatch(formSetDisableSaveFieldDocument(key, value));\n  }\n\n  getDisableSaveFieldDocument(documentId: string) {\n    const disabledSaveFields = this.appStore.getState().formState.recordedDisableSaveFieldValues[documentId];\n    return disabledSaveFields ? cloneDeep(disabledSaveFields) : {};\n  }\n\n  resetDisableSaveFieldToDoc(doc) {\n\n    const disabledSaveFields = this.getDisableSaveFieldDocument(doc.documentId);\n    const fieldNames = Object.keys(disabledSaveFields);\n    fieldNames.forEach(fieldName => {\n      doc[fieldName] = disabledSaveFields[fieldName];\n    });\n  }\n}\n","import { Injectable, HostListener, inject } from '@angular/core';\nimport { DocumentData, DocumentInfo, FormDocument, FormTemplate } from '@formbird/types';\nimport { select} from '../../redux/decorators/select';\nimport { IApplicationState } from '../../redux/state/application.state';\nimport { Observable, Subject } from 'rxjs';\nimport { cloneDeep } from 'es-toolkit';\nimport { formResetDocumentInfo, formResetInitDocumentData } from '../../redux/actions/form-new.actions';\nimport { CurrentDocumentInfoService } from './current-document-info.service';\nimport { DocumentService } from './document.service';\nimport { AppStore } from '../../redux/store/app.store';\n\n/**\n * This service stores the document data for the document on the attached main template.\n * It will be retrieved to navigate to document after creating from template, command bar buttons or left/right sidebar visibility...\n */\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class CurrentDocumentService {\n  private appStore = inject<AppStore<IApplicationState>>(AppStore);\n  private currentDocumentInfoService = inject(CurrentDocumentInfoService);\n  private documentService = inject(DocumentService);\n\n\n  @select(['formState', 'documents']) documents$: Observable<any>;\n  @select(['formState', 'documentInfo']) documentInfo$: Observable<any>;\n\n  private documentData: DocumentData;\n  private documentDataSubject: Subject<DocumentData>;\n  public documentData$: Observable<DocumentData>;\n\n  private mainUnsavedDocumentListId: string;\n  private documentId: string;\n\n  constructor() {\n\n    this.documentData = {\n      document: null,\n      template: null\n    };\n    this.documentDataSubject = new Subject<DocumentData>();\n    this.documentData$ = this.documentDataSubject.asObservable();\n\n    this.documents$.subscribe(documents => {\n\n      this.updateDocumentData();\n\n    });\n\n    this.documentInfo$.subscribe(documentInfos => {\n\n      this.updateDocumentData();\n\n    });\n  }\n\n  private updateDocumentData() {\n\n    let changed = false;\n\n    const mainDocInfo = this.appStore.getState().formState.documentInfo[this.mainUnsavedDocumentListId];\n    if (mainDocInfo && mainDocInfo[this.documentId]) {\n      const docInfo = mainDocInfo[this.documentId];\n\n      this.documentData.documentId = docInfo.documentId;\n      this.documentData.templateId = docInfo.templateId;\n      this.documentData.options = docInfo.options;\n      this.documentData.overrideTemplateId = docInfo.overrideTemplateId;\n      this.documentData.showFormAfterCreated = docInfo.showFormAfterCreated;\n      this.documentData.hierarchyInfo = docInfo.hierarchyInfo;\n      this.documentData.altTemplateId = docInfo.altTemplateId;\n      this.documentData.isNew = docInfo.isNew;\n      this.documentData.isMainDoc = docInfo.isMainDoc;\n\n      changed = true;\n\n    }\n\n    const documents = this.appStore.getState().formState.documents;\n    const templates = this.appStore.getState().formState.templates;\n\n    if (documents && Object.keys(documents)) {\n      const document = documents[this.documentData.documentId];\n      if (document) {\n        this.documentData.document = cloneDeep(document);\n        changed = true;\n      }\n\n      const template = templates[this.documentData.templateId];\n      if (template) {\n        this.documentData.template = cloneDeep(template);\n        changed = true;\n      }\n    }\n\n    if (changed) {\n      this.documentDataSubject.next(this.documentData);\n    }\n\n  }\n\n  /**\n   * Set main document list and the attached main document\n   * @param documentListId\n   * @param documentId\n   */\n  public setMainDocumentListId(documentListId, documentId) {\n\n    this.mainUnsavedDocumentListId = documentListId;\n    this.documentId = documentId;\n\n  }\n\n  public getMainDocumentListId() {\n    return this.mainUnsavedDocumentListId;\n  }\n\n  public getMainDocumentId() {\n    return this.documentId;\n  }\n\n  public getDocumentData(): DocumentData {\n    return this.currentDocumentInfoService.getDocumentData(this.mainUnsavedDocumentListId, this.documentId);\n  }\n\n  /**\n   * get the document from the main document - which is the document that the object nav bar is linked to\n   */\n  public getDocument(): FormDocument {\n    return this.getDocumentData().document;\n  }\n\n  public setDocument(document) {\n    this.documentService.setLoadedDocumentOnly(document);\n  }\n\n  /**\n   * get the template from the main document - which is the document that the object nav bar is linked to\n   */\n  public getTemplate(): FormTemplate {\n    return this.getDocumentData()?.template;\n  }\n\n  public setTemplate(template) {\n\n    this.documentService.setLoadedDocumentOnly(template);\n  }\n\n  public resetDocumentData(unsavedDocumentListId) {\n\n    this.appStore.dispatch(formResetDocumentInfo(unsavedDocumentListId));\n  }\n\n  public resetInitDocumentData() {\n    this.appStore.dispatch(formResetInitDocumentData(this.mainUnsavedDocumentListId, this.documentId));\n  }\n\n}\n","import { CurrentDocumentService } from './current-document.service';\nimport { Injectable, inject } from '@angular/core';\nimport { SharedConstants, User } from '@formbird/types';\nimport { isEqual } from 'lodash';\nimport { Observable } from 'rxjs';\nimport { ClientConstants } from '../../constants/ClientConstants';\nimport { select } from '../../redux/decorators/select';\nimport { ClientAccessService } from '../access/client-access.service';\nimport { BroadcastService } from '../broadcast/broadcast.service';\nimport { DocumentService } from './document.service';\nimport { UnsavedDocumentService } from './unsaved-document.service';\n\nconst logger = console;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ModifiedFieldService {\n  private documentService = inject(DocumentService);\n  private clientAccessService = inject(ClientAccessService);\n  private unsavedDocumentService = inject(UnsavedDocumentService);\n  private currentDocumentService = inject(CurrentDocumentService);\n  private broadcastService = inject(BroadcastService);\n\n\n  @select(['userState', 'user']) user$: Observable<User>;\n  user: User;\n\n  // list of modified fields in a document\n  public modifiedFields = {};\n\n  // store the changed data while the document is pushing into server\n  public savingChangedData = {};\n\n  // controls the dirty checking\n  public formDirty = {\n    showSpinner: false,\n    isSaving: false,\n    dirty: false,\n    updateAllowed: false,\n    validating: null\n  };\n\n  constructor() {\n    this.user$.subscribe((user: User) => {\n      this.user = user;\n    });\n  }\n\n  private canUpdateDoc(targetDocument) {\n\n    if (!targetDocument) {\n      return false;\n    }\n\n    // if the document is new\n    if (targetDocument.systemHeader && !targetDocument.systemHeader.createdDate) {\n      // check if user can create\n      return this.clientAccessService.checkAccess(targetDocument, SharedConstants.OPERATION_TYPE_CREATE);\n\n    } else {\n\n      // check if user can update\n      return this.clientAccessService.checkAccess(targetDocument, SharedConstants.OPERATION_TYPE_UPDATE);\n    }\n  }\n\n  /**\n   * Check if the current form is dirty, that make the save button appear and blink or display unsaved changes dialog\n   */\n  isDirty() {\n    return this.formDirty.dirty;\n  }\n\n  shouldApplyFlags(documentListId) {\n    // Should apply flag on the document list that was attached to command bar\n    const con1 = !documentListId || documentListId === this.currentDocumentService.getMainDocumentListId();\n    const isModal = this.unsavedDocumentService.isModalDocument(documentListId);\n    return con1 || !isModal;\n  }\n\n  /**\n   * Set current form to be dirty, that make the save button appear and blink\n   * @param isDirty is dirty\n   * @param documentId the document id\n   */\n  setDirty(isDirty, documentId?, unsavedDocumentListId?) {\n\n    if (!this.shouldApplyFlags(unsavedDocumentListId)) {\n      return;\n    }\n\n    if (isDirty !== this.formDirty.dirty) {\n\n      // don't set the dirty value if save is in progress. Any change in a presave server rule will go into the save. The\n      // isSaving flag should have been cleared by the time of a postSave rule so that the save button will appear if the\n      // document is changed in the postSave rule\n      if (isDirty) {\n\n        if (!this.formDirty.isSaving) {\n\n          if (this.formDirty.updateAllowed) {\n\n            this.formDirty.dirty = isDirty;\n\n          } else {\n\n            const targetDoc = this.documentService.getExistingDocument(documentId);\n\n            if (this.canUpdateDoc(targetDoc)) {\n\n              this.formDirty.dirty = isDirty;\n            }\n          }\n        }\n\n      } else {\n\n        this.formDirty.dirty = false;\n\n      }\n    }\n\n    this.broadcastService.broadcast(ClientConstants.FORM_DIRTY_UPDATED, this.formDirty);\n  }\n\n  setShowSpinner(showSpinner, unsavedDocumentListId?) {\n\n    if (!this.shouldApplyFlags(unsavedDocumentListId)) {\n      return;\n    }\n\n    this.formDirty.showSpinner = showSpinner;\n\n    this.broadcastService.broadcast(ClientConstants.SPINNER_UPDATED, showSpinner);\n\n  }\n\n  /**\n   * Allow this form to be updatable.\n   * @param isAllowedUpdate is allowed update\n   */\n  setUpdateAllowed(isAllowedUpdate) {\n\n    this.formDirty.updateAllowed = isAllowedUpdate;\n  }\n\n  /**\n   * Reset the current form to its un-interacted state.\n   */\n  resetFormDirty() {\n    this.setDirty(false);\n  }\n\n  /**\n   * Sets the current form to be updatable depending on the current user's privileges.\n   * @param docData the doc data object\n   */\n  setFormAccess(docData) {\n\n    this.setUpdateAllowed(false); // default to false\n\n    const userAccount = this.user ? this.user.account : null;\n\n    // do not allow update\n    if (!docData || !userAccount) {\n      return;\n    }\n\n    if (this.canUpdateDoc(docData)) {\n      this.setUpdateAllowed(true);\n    }\n  }\n\n  isSaving() {\n    return this.formDirty.isSaving;\n  }\n\n  setSaveFlag(isSaving, unsavedDocumentListId?) {\n\n    if (!this.shouldApplyFlags(unsavedDocumentListId)) {\n      return;\n    }\n    \n    this.formDirty.isSaving = isSaving;\n  }\n\n  /*\n   * This method is used to add modified field by document id.\n   * Before adding should check whether the version of the document has changed from the original because\n   * there is a case reset current document from the one returned from server once it is saved.\n   * @returns: true if adding successfully, otherwise: false\n   */\n  addModifiedField(documentId, changedFieldName, documentListId, shouldCompareDocuments?, overrideTemplateId?) {\n\n    let result = false;\n\n    if (!documentListId) {\n      logger.error('Document list id not provided in addModifiedField');\n\n    } else if (!documentId) {\n      logger.error('Document id not provided in addModifiedField');\n\n    } else if (!changedFieldName) {\n      logger.error('Changed field name not provided in addModifiedField');\n\n    } else if (!this.unsavedDocumentService.isDocumentsDefined(documentListId)) {\n      logger.info('Unsaved Document List is not found');\n\n    } else {\n\n      let shouldAdd = false;\n\n      const isPushing = this.isPushing(documentId);\n      if (!isPushing && (shouldCompareDocuments === undefined || shouldCompareDocuments === true)) {\n\n        shouldAdd = this.isChangedField(documentId, changedFieldName, documentListId, overrideTemplateId);\n\n      } else {\n\n        shouldAdd = true;\n      }\n\n      if (shouldAdd) {\n\n        if (isPushing) {\n\n          if (!this.savingChangedData[documentId]) {\n            this.savingChangedData[documentId] = {};\n          }\n\n          if (!this.savingChangedData[documentId].data) {\n            this.savingChangedData[documentId].data = {};\n          }\n\n          this.savingChangedData[documentId][ClientConstants.CHANGED_DOCUMENT_LIST_ID_KEY] = documentListId;\n          this.savingChangedData[documentId].data[changedFieldName] = this.unsavedDocumentService.getDocumentOnly(documentId)[changedFieldName];\n          \n          logger.info('Document is pushing into server. Record the modified field: ', this.savingChangedData);\n          return;\n        }\n\n        if (!this.modifiedFields[documentId]) {\n          this.modifiedFields[documentId] = {};\n        }\n\n        this.modifiedFields[documentId][changedFieldName] = true;\n        this.modifiedFields[documentId][ClientConstants.CHANGED_DOCUMENT_LIST_ID_KEY] = documentListId;\n\n        this.setDirty(true, documentId, documentListId);\n\n        logger.info('Adding new modified field. Doc: ' + documentId + ' - field: ' + changedFieldName);\n\n        result = true;\n      }\n    }\n\n    return result;\n  }\n\n  resetModifiedFields() {\n\n    logger.info('Resetting all modified fields...');\n\n    this.modifiedFields = {};\n    this.broadcastService.broadcast(ClientConstants.FORM_RESET);\n  }\n\n  // Remove all changed fields of a document\n  removeModifiedDocumentFields(documentId) {\n\n    logger.info('Resetting all modified fields of a document...');\n\n    delete this.modifiedFields[documentId];\n\n    if (!this.hasAnyChanged()) {\n      this.setDirty(false);\n    }\n  }\n\n  isPushing(documentId) {\n    return this.savingChangedData[documentId] && this.savingChangedData[documentId].isPushing;\n  }\n\n  setPushingData(isPushing, documentId) {\n\n    if (!this.savingChangedData[documentId]) {\n      this.savingChangedData[documentId] = {};\n    }\n\n    this.savingChangedData[documentId].isPushing = isPushing;\n  }\n\n  resetPushingData(documentId) {\n\n    if (this.savingChangedData[documentId]) {\n      \n      this.savingChangedData[documentId].isPushing = false;\n    }\n  }\n\n  removeAllSavingChangedDocumentFields() {\n\n    logger.info('Resetting all saving changed fields...');\n\n    this.savingChangedData = { };\n\n  }\n\n  assignChangedDocumentFields(document) {\n  \n    const documentId = document.documentId;\n  \n    this.modifiedFields[documentId] = {};\n    this.modifiedFields[documentId][ClientConstants.CHANGED_DOCUMENT_LIST_ID_KEY] = this.savingChangedData[documentId][ClientConstants.CHANGED_DOCUMENT_LIST_ID_KEY];\n  \n    const fields = Object.keys(this.savingChangedData[documentId].data);\n    fields?.forEach(field => {\n  \n      const changedFieldValue = this.savingChangedData[documentId].data[field];\n      const fieldValue = document[field];\n  \n      if (!isEqual(changedFieldValue, fieldValue)) {\n  \n        this.modifiedFields[documentId][field] = true;\n  \n      } else {\n  \n        delete this.savingChangedData[documentId].data[field];//remove the stored saving changed field if it is the same as the field of saved document\n  \n      }\n  \n    });\n  }\n\n  // Remove all changed fields of a template\n  removeTemplateFields(templateId) {\n\n    logger.info('Removing changed fields of template: ' + templateId);\n\n    delete this.modifiedFields[templateId];\n  }\n\n  removeChangedField(documentId, changedFieldName) {\n    logger.warn('DEPRECATED: Please call ModifiedFieldService.removeModifiedField ' +\n      'instead of ModifiedFieldService.removeChangedField');\n\n    this.removeModifiedField(documentId, changedFieldName);\n  }\n\n  removeModifiedField(documentId, changedFieldName) {\n\n    if (this.modifiedFields[documentId]) {\n\n      logger.info('Removing changed field: ' + changedFieldName + ' of document: ' + documentId);\n\n      delete this.modifiedFields[documentId][changedFieldName];\n    }\n\n    if (!this.hasAnyChanged()) {\n      this.setDirty(false);\n    }\n  }\n\n  isChangedField(documentId, changedFieldName, documentListId, overrideTemplateId?) {\n\n    try {\n\n      const currentDoc = this.unsavedDocumentService.getDocumentOnly(documentId);\n      const currentOriginalDoc = this.documentService.getExistingDocument(documentId);\n\n      if (currentDoc && !currentOriginalDoc ||    // create doc mode\n        (currentDoc && currentOriginalDoc &&    // modify doc && component editor mode\n          !isEqual(currentDoc[changedFieldName], currentOriginalDoc[changedFieldName])) ||\n        (overrideTemplateId && !isEqual(currentDoc, currentOriginalDoc))) {   // override template\n\n        return true;\n      }\n\n    } catch (e) {\n    }\n\n    return false;\n  }\n\n  /**\n   * whether the document has unsaved changes\n   * @param documentId the document id\n   * @returns the result\n   */\n  hasChanged(documentId, unsavedDocumentListId?) {\n\n    logger.info('Checking changed document. Stored modified fields: ' + JSON.stringify(this.modifiedFields));\n\n    const changes = this.getModifiedFieldsInDoc(documentId);\n\n    if (!unsavedDocumentListId) {\n      return changes.length > 0;\n    }\n\n    return unsavedDocumentListId === changes[ClientConstants.CHANGED_DOCUMENT_LIST_ID_KEY];\n  }\n\n  /**\n   * whether any documents have been changed\n   * @returns the result\n   */\n  hasAnyChanged() {\n\n    const documentIds = Object.keys(this.modifiedFields);\n\n    if (documentIds) {\n\n      for (let id = 0; id < documentIds.length; id++) {\n\n        const infos = Object.keys(this.modifiedFields[documentIds[id]]);\n\n        for (let i = 0; i < infos.length; i++) {\n\n          const key = infos[i];\n          if (key !== ClientConstants.CHANGED_DOCUMENT_LIST_ID_KEY) {\n\n            return true;\n          }\n\n        }\n      }\n    }\n\n    return false;\n  }\n\n  hasSavingChanged(documentId) {\n    console.log('Saving changed data: ', this.savingChangedData[documentId]?.data);\n    return this.savingChangedData[documentId] &&\n      this.savingChangedData[documentId].data && \n      Object.keys(this.savingChangedData[documentId].data);\n  }\n\n  hasAnySavingChanged() {\n    \n    const documentIds = Object.keys(this.savingChangedData);\n    \n    if (documentIds?.length) {\n    \n      for (let id = 0; id < documentIds.length; id++) {\n    \n        const documentId = documentIds[id];\n        const data = this.savingChangedData[documentId]?.data;\n        if (data) {\n          const fields = Object.keys(data);\n          if (fields?.length) {\n            return true;\n          }\n        }\n        \n      }\n    }\n\n    return false;\n  }\n\n  extractSavingChangedAsDocument(documentId) {\n    return this.savingChangedData[documentId].data;\n  }\n\n  /**\n   * get the unsaved documents for the unsaved document list. This needs to be separate from UnsavedDocumentService to avoid\n   * a circular dependency of Angular service injections\n   * @param unsavedDocumentListId - the id of the list to get the changed docs for\n   */\n  getModifiedDocuments(unsavedDocumentListId) {\n  \n    if (!unsavedDocumentListId) {\n      throw new Error('Unsaved document list id not specified when getting loaded documents');\n    }\n\n    const self = this;\n\n    const loadedDocs = this.unsavedDocumentService.getUnsavedDocuments(unsavedDocumentListId);\n\n    // only return documents that have unsaved changes. Load the modified docs into unsavedDocs\n    const unsavedDocs = [];\n\n    if (loadedDocs) {\n\n\n      loadedDocs.forEach(function (loadedDoc) {\n\n        if (self.hasChanged(loadedDoc?.documentId)) {\n\n          unsavedDocs.push(loadedDoc);\n\n        }\n\n      });\n    }\n\n    return unsavedDocs;\n  }\n\n  getChangedDocumentListId(documentId) {\n\n    return this.modifiedFields[documentId] ?\n      this.modifiedFields[documentId][ClientConstants.CHANGED_DOCUMENT_LIST_ID_KEY] : null;\n  }\n\n  getAllChangedDocumentListIds() {\n\n    const res = [];\n    const documentIds = Object.keys(this.modifiedFields);\n\n    for (let i = 0; i < documentIds.length; i++) {\n\n      const unsavedDocumentListId = this.modifiedFields[documentIds[i]][ClientConstants.CHANGED_DOCUMENT_LIST_ID_KEY];\n      if (unsavedDocumentListId) {\n\n        res.push(unsavedDocumentListId);\n\n      }\n    }\n\n    return res;\n  }\n\n  /**\n   * Get all the changed fields of the provided document.\n   * @param documentId \n   * @returns \n   */\n  getModifiedFieldsInDoc(documentId) {\n    const changedFieldNames = [];\n\n    const info = this.modifiedFields[documentId];\n\n    if (info) {\n\n      const keys = Object.keys(info);\n\n      for (let i = 0; i < keys.length; i++) {\n\n        const key = keys[i];\n\n        if (key !== ClientConstants.CHANGED_DOCUMENT_LIST_ID_KEY) {\n\n          changedFieldNames.push(key);\n        }\n      }\n    }\n\n    return changedFieldNames;\n  }\n\n}\n","import { UtilArray, UtilDocument } from '@formbird/shared';\nimport { SharedConstants } from '@formbird/types';\nimport { formSetComponentFlagTemplate, formSetListComponentsFlagTemplate, \n  formSetComponentPropsTemplate } from '../../redux/actions';\n\nconst logger = console;\n\nexport class RuleContext {\n\n  private currentEventName;\n  private currentDocument;\n  private currentTemplate;\n  private currentDocumentContext;\n  private affectedDoc;\n  private affectedTpl;\n  private superObj;\n\n  constructor(superObj, eventName, processDoc, documentContext) {\n\n    this.superObj = superObj;\n    this.currentEventName = eventName;\n    this.currentDocument = processDoc;\n    this.currentTemplate = documentContext.template;\n    this.currentDocumentContext = documentContext;\n\n  }\n\n\n  getComponentDefinition(field) {\n    const examDoc = this.determineAffectedDoc(field);\n    return this.loadTplItem(examDoc.docField);\n  }\n\n  isVisible(field) {\n    return this.getComponentDefinition(field)?.visible !== false;\n  }\n\n  showField(field, flag) {\n\n    this.setFieldFlag(field, 'visible', flag);\n\n  }\n\n  showFields(fields, flag) {\n    this.setFieldFlags(fields, 'visible', flag);\n  }\n\n  enableField(field, flag) {\n\n    this.setFieldFlag(field, 'enabled', flag);\n\n  }\n\n  isEnabled(field) {\n    return this.getComponentDefinition(field)?.enabled !== false;\n  }\n\n  enableFields(fields, flag) {\n    this.setFieldFlags(fields, 'enabled', flag);\n  }\n\n  filterAndSetAffectedDoc(fields) {\n    const res = [];\n\n    for (let i = 0; i < fields.length; i++) {\n    \n      let examDoc = this.determineAffectedDoc(fields[i]);\n      \n      if (this.affectedDoc) {\n    \n        const field = examDoc.docField;\n    \n        let tplItem = this.loadTplItem(field);\n    \n        if (!tplItem) {\n          logger.warn('Template does not contain field: ' + field + ' to mandate.');\n    \n        } else {\n    \n          res.push(field);\n    \n        }\n      }\n    }\n\n    return res;\n  }\n\n  isMandatory(field) {\n    return this.getComponentDefinition(field)?.mandatory === true;\n  }\n\n  mandateField(field, flag) {\n\n    const examDoc = this.determineAffectedDoc(field);\n\n    if (this.affectedDoc) {\n\n      if (flag !== undefined) {\n        const tplItem = this.loadTplItem(examDoc.docField);\n\n        if (!tplItem) {\n          logger.warn('Template does not contain field: ' + field + ' to mandate.');\n          return;\n        }\n\n        const result = (flag === 'yes' || flag === 'true' || flag === true);\n\n        this.superObj.dispatchStoreAction(formSetComponentFlagTemplate(this.affectedTpl.documentId, examDoc.docField, 'mandatory', result));\n\n        if (!result) {\n          this.superObj.setValidationValue(this.affectedDoc, examDoc.docField, 'required', false);\n        }\n\n      }\n    }\n  }\n\n  mandateFields(fields, flag) {\n\n    const resFields = this.filterAndSetAffectedDoc(fields);\n\n    if (resFields.length) {\n\n      const result = (flag === 'yes' || flag === 'true' || flag === true);\n\n      this.superObj.dispatchStoreAction(formSetListComponentsFlagTemplate(this.affectedTpl.documentId, resFields, 'mandatory', result));\n\n      if (!result) {\n        for (let i = 0; i < resFields.length; i++) {\n          this.superObj.setValidationValue(this.affectedDoc, resFields[i], 'required', false);\n        }\n      }\n\n    }\n\n  }\n\n  setFieldValue(field, value, tmp) {\n\n    const examDoc = this.determineAffectedDoc(field);\n\n    if (this.affectedDoc) {\n      if (tmp) {\n\n        logger.warn('Please use function setFieldValue(field, value) instead of setFieldValue(doc, field, value)');\n\n        this.affectedDoc[value] = tmp;\n\n      } else {\n\n        this.affectedDoc[examDoc.docField] = value;\n\n      }\n    }\n  }\n\n  getFieldValue(field, tmp) {\n\n    const examDoc = this.determineAffectedDoc(field);\n\n    if (this.affectedDoc) {\n\n      if (tmp) {\n\n        logger.warn('Please use function getFieldValue(field) instead of getFieldValue(doc, field)');\n        return this.affectedDoc[tmp];\n\n      } else {\n\n        return this.affectedDoc[examDoc.docField];\n\n      }\n    }\n  }\n\n  checkChecklistItem(field, optionName, checked) {\n\n    const examDoc = this.determineAffectedDoc(field);\n\n    if (this.affectedDoc) {\n\n      let fieldValues = this.affectedDoc[examDoc.docField];\n      if (fieldValues) {\n\n        const matchIndex = UtilArray.containsIndex(fieldValues, optionName);\n\n        if (checked === 'yes' || checked === true) {\n\n          if (matchIndex === -1) {\n            fieldValues.push(optionName);\n          }\n\n        } else {\n\n          if (matchIndex > -1) {\n            fieldValues.splice(matchIndex, 1);\n          }\n\n        }\n      } else {\n\n        if (checked === 'yes' || checked === true) {\n          fieldValues = [];\n          fieldValues.push(optionName);\n        }\n\n      }\n\n      this.affectedDoc[examDoc.docField] = fieldValues;\n\n      this.superObj.eventList[SharedConstants.ON_CHANGE_FILTER_EVENT_NAME] = {};\n      this.superObj.eventList[SharedConstants.ON_CHANGE_FILTER_EVENT_NAME]\n      [SharedConstants.RULESET_RESULT_FLAG] = true;\n      this.superObj.eventList[SharedConstants.ON_CHANGE_FILTER_EVENT_NAME]\n      [SharedConstants.RULESET_AFFECTED_FIELD_NAME] = examDoc.docField;\n      this.superObj.eventList[SharedConstants.ON_CHANGE_FILTER_EVENT_NAME]\n      [SharedConstants.RULESET_AFFECTED_TEMPLATE_ID] = this.affectedTpl.documentId;\n      this.superObj.eventList[SharedConstants.ON_CHANGE_FILTER_EVENT_NAME]\n      [SharedConstants.RULESET_AFFECTED_DOCUMENT_ID] = this.affectedDoc.documentId;\n\n      this.superObj.broadcastEvent(SharedConstants.EVENT_LIST_NAME, this.superObj.eventList);\n    }\n  }\n\n  getFilter(field) {\n\n    return this.getGridFilter(field);\n\n  }\n\n  getGridFilter(field) {\n\n    const examDoc = this.determineAffectedDoc(field);\n\n    if (this.affectedDoc) {\n\n      const tplItem = this.loadTplItem(examDoc.docField);\n\n      if (tplItem) {\n        return tplItem.filter;\n      }\n    }\n  }\n\n  setGridFilter(field, newFilter) {\n\n    this.setFilter(field, newFilter);\n\n  }\n\n  setFilter(field, newFilter) {\n\n    const examDoc = this.determineAffectedDoc(field);\n\n    if (this.affectedDoc) {\n\n      const tplItem = this.loadTplItem(examDoc.docField);\n\n      if (!tplItem) {\n        logger.warn('Template does not contain field: ' + field + ' to set filter.');\n        return;\n      }\n\n      this.superObj.dispatchStoreAction(formSetComponentFlagTemplate(this.affectedTpl.documentId, examDoc.docField, 'filter', newFilter));\n\n      this.superObj.eventList[SharedConstants.ON_CHANGE_FILTER_EVENT_NAME] = {};\n      this.superObj.eventList[SharedConstants.ON_CHANGE_FILTER_EVENT_NAME]\n      [SharedConstants.RULESET_NEW_FILTER] = newFilter;\n      this.superObj.eventList[SharedConstants.ON_CHANGE_FILTER_EVENT_NAME]\n      [SharedConstants.RULESET_AFFECTED_FIELD_NAME] = examDoc.docField;\n      this.superObj.eventList[SharedConstants.ON_CHANGE_FILTER_EVENT_NAME]\n      [SharedConstants.RULESET_AFFECTED_TEMPLATE_ID] = this.affectedTpl.documentId;\n      this.superObj.eventList[SharedConstants.ON_CHANGE_FILTER_EVENT_NAME]\n      [SharedConstants.RULESET_AFFECTED_DOCUMENT_ID] = this.affectedDoc.documentId;\n      this.superObj.eventList[SharedConstants.ON_CHANGE_FILTER_EVENT_NAME]\n      [SharedConstants.RULESET_EVENT_NAME] = this.currentEventName;\n\n      this.superObj.broadcastEvent(SharedConstants.EVENT_LIST_NAME, this.superObj.eventList);\n    }\n  }\n\n  openNewDocument(templateId, initialData, newWindow, callback) {\n\n    this.superObj.tabService.openNewDocument(templateId, initialData, newWindow, callback);\n\n  }\n\n  markDocumentChanged() {\n\n    this.superObj.modifiedFieldService.setDirty(true);\n\n  }\n\n  isNew(doc) {\n\n    return UtilDocument.isNew(doc ? doc : this.affectedDoc);\n\n  }\n\n  determineAffectedDoc(field) {\n\n    const result = {} as any;\n\n    if (field && field.indexOf('.') !== -1) {\n\n      const temp = field.split('.');\n      result.docPrefix = temp[0]; // Must be 'parentDoc' OR 'childDoc'\n      result.docField = temp[1];\n\n    } else {\n      result.docField = field;\n    }\n\n    this.setAffectedItems(result.docPrefix);\n\n    return result;\n  }\n\n  /**\n   * Set affected items: document, templateId, template item\n   */\n  setAffectedItems(docPrefix) {\n\n    if (docPrefix === SharedConstants.RULESET_PARENT_DOCUMENT) {\n      this.affectedDoc = this.superObj.getDocumentFromStore(this.currentDocumentContext.parentDocument.documentId);\n      this.affectedTpl = this.superObj.getTemplateFromStore(this.currentDocumentContext.parentTemplate.documentId);\n\n    } else if (docPrefix === SharedConstants.RULESET_CHILD_DOCUMENT) {\n      this.affectedDoc = this.superObj.getDocumentFromStore(this.currentDocumentContext.childDocument.documentId);\n      this.affectedTpl = this.superObj.getTemplateFromStore(this.currentDocumentContext.childTemplate.documentId);\n\n    } else {\n      this.affectedDoc = this.superObj.getDocumentFromStore(this.currentDocument.documentId);\n      this.affectedTpl = this.superObj.getTemplateFromStore(this.currentTemplate.documentId);\n    }\n  }\n\n\n  setComponentProps(field, componentName, propertyValue) {\n    const examDoc = this.determineAffectedDoc(field);\n\n    if (this.affectedDoc) {\n      const tplItem = this.loadTplItem(examDoc.docField);\n      \n      if (!tplItem) {\n        logger.warn('Template does not contain field: ' + field + ' to show/enable.');\n        return;\n      }\n\n      this.superObj.dispatchStoreAction(formSetComponentPropsTemplate(\n        this.affectedTpl.documentId, examDoc.docField, componentName, propertyValue));\n    }\n    \n    return false;\n  }\n\n  setFieldFlag(field, fieldFlag, flag) {\n\n    const examDoc = this.determineAffectedDoc(field);\n\n    if (this.affectedDoc) {\n      if ('enabled' === fieldFlag) {\n\n        if (!this.superObj.clientAccessService.hasPermission(this.affectedDoc, 'Update,Create')) {\n          return;\n        }\n\n      }\n\n      if (flag !== undefined) {\n        const tplItem = this.loadTplItem(examDoc.docField);\n\n        if (!tplItem) {\n          logger.warn('Template does not contain field: ' + field + ' to show/enable.');\n          return;\n        }\n\n        const result = (flag === 'yes' || flag === 'true' || flag === true);\n        this.superObj.dispatchStoreAction(formSetComponentFlagTemplate(this.affectedTpl.documentId, examDoc.docField, fieldFlag, result));\n\n        return result;\n      }\n    }\n\n    return false;\n  }\n\n  setFieldFlags(fields, fieldFlagName, flag) {\n\n    const resFields = this.filterAndSetAffectedDoc(fields);\n\n    if (resFields.length) {\n\n      if (flag !== undefined) {\n\n        const result = (flag === 'yes' || flag === 'true' || flag === true);\n        \n        this.superObj.dispatchStoreAction(formSetListComponentsFlagTemplate(this.affectedTpl.documentId, resFields, fieldFlagName, result));\n\n        return result;\n      }\n    }\n\n    return false;\n  }\n\n  loadTplItem(fieldName) {\n\n    if (this.affectedTpl && this.affectedTpl.components) {\n\n      for (let i = 0; i < this.affectedTpl.components.length; i++) {\n\n        const tplItem = this.affectedTpl.components[i];\n\n        if (tplItem.name === fieldName) {\n          return tplItem;\n        }\n      }\n    }\n\n    return null;\n  }\n\n  refreshComponentData(fieldName) {\n    const examDoc = this.determineAffectedDoc(fieldName);\n    if (this.affectedDoc) {\n      this.superObj.broadcastEvent(SharedConstants.EVENT_REFRESH_COMPONENT_NAME, {\n        fieldName: examDoc.docField,\n        documentId: this.affectedDoc.documentId\n      });\n    }\n  }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { SharedUrlRoutes } from '@formbird/shared';\nimport { FtError, SharedConstants } from '@formbird/types';\nimport { IndexedDBConnectorService } from '../indexeddb/indexed-dbconnector.service';\nimport { HttpClient } from '@angular/common/http';\nimport { DataService } from '../data/data.service';\nimport { firstValueFrom } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root'\n})\n\nexport class IncludeDocumentDataService {\n  private indexedDBConnectorService = inject(IndexedDBConnectorService);\n  private dataService = inject(DataService);\n  private http = inject(HttpClient);\n\n\n  async getIncludeDocuments(includeNames: any): Promise<any> {\n    const onlineFunc: any = async (includeNames) => {\n      const url = SharedUrlRoutes.serverRoutes.loadIncludeDocs;\n      const body = { includeNames };\n      try {\n        return await firstValueFrom(this.http.post<any>(url, body));\n      } catch (err) {\n        const msg = err ? err.message : 'Something went wrong when getting include documents.';\n        const error = new FtError(msg);\n\n        if (err) {\n          error.status = err.status;\n          error.statusText = err.statusText;\n          error.message = err.error;\n        }\n\n        throw error;\n      }\n    };\n\n    const oflineFunc: any = async (includeNames: any): Promise<any> => {\n      const db = await this.indexedDBConnectorService.getDatabase();\n      const result = db.documents.where('systemHeader.systemType').equals(SharedConstants.SYSTEM_TYPE_RULESET_INCLUDE);\n\n      return new Promise<any>((resolve, reject) => {\n        result.toArray((documents) => {\n          try {\n            const results = documents.filter(document =>\n              document.systemHeader?.currentVersion === true && includeNames.includes(document.name));\n            resolve(results);\n          } catch (err) {\n            reject(err);\n          }\n        });\n      });\n    };\n\n    try {\n      return await this.dataService.executeDataFunction(onlineFunc, oflineFunc, includeNames);\n    } catch (err) {\n\n      console.error('Get ruleset include documents failed with error: ' + err);\n      throw new Error(err);\n    }\n  }\n\n}\n","import { SharedConstants } from '@formbird/types';\nimport { UtilIncludeRuleSet } from '@formbird/shared';\nimport { Injectable, inject } from '@angular/core';\nimport { ConfigService } from '../config/config.service';\nimport { IncludeDocumentDataService } from './include-document-data.service';\nimport { NotificationService } from '../notification/notification.service';\n\nconst logger = console;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ClientIncludeRuleSetService {\n  private configService = inject(ConfigService);\n  private includeDocumentDataService = inject(IncludeDocumentDataService);\n  private notificationService = inject(NotificationService);\n\n\n  private loadIncludeDocs(includeNames, callback) {\n    this.includeDocumentDataService.getIncludeDocuments(includeNames).then((results: any) => {\n      let docs = results ? results : [];\n      const tmpData = { data: docs, total: docs.length};\n      callback(null, tmpData);\n    }, (err) => {\n      logger.warn(err);\n      callback(err);\n    });\n  }\n\n  /*\n   * Including ruleset processing.\n   * Include ruleset syntax: #include \"rulesetName\";\n   */\n  addIncludesToRuleset(ruleFlow, callback) {\n\n    const includeNames = UtilIncludeRuleSet.getIncludeNames(ruleFlow);\n\n    if (includeNames && includeNames.length) {\n\n      const remainIncludeNames = [];\n\n      // remove commented #include\n      for (let i = 0; i < includeNames.length; i++) {\n\n        const beforeLength = ruleFlow.length;\n        const commentLineExp = '//[\\t ]*#include[\\t ]+[\\'\"]' + includeNames[i] + '[\\'\"][\\t ]*.*';\n        ruleFlow = ruleFlow.replace(new RegExp(commentLineExp, 'g'), '');\n\n        if (beforeLength === ruleFlow.length) {\n          // Keep not commented include name\n          remainIncludeNames.push(includeNames[i]);\n        }\n      }\n\n      if (remainIncludeNames.length) {\n\n        this.loadIncludeDocs(remainIncludeNames, (error, result) => {\n\n          if (error) {\n\n            callback({\n              status: SharedConstants.STATUS_ERROR,\n              message: 'Error loading include ruleset: ' + error.message\n            });\n\n          } else if (result && result.total && result.total >= remainIncludeNames.length) {\n\n            const duplicates = result.data.map(value => value.name).filter((value, index, self) => {\n              return self.indexOf(value) !== index;\n            });\n\n            if (duplicates.length) this.notificationService.warning(`Duplicate ruleset include: ${duplicates}`);\n\n            for (let id = 0; id < result.total; id++) {\n              const includeDoc = result.data[id];\n\n              // replace #include by script for JS\n              const exp = '#include[\\t ]+[\\'\"]' + includeDoc.name + '[\\'\"][\\t ]*,';\n              ruleFlow = ruleFlow.replace(new RegExp(exp, 'g'), includeDoc.ruleSetSnippet + ',');\n            }\n\n            callback({\n              status: SharedConstants.STATUS_SUCCESS,\n              ruleFlow: ruleFlow\n            });\n\n          } else {\n\n            let missedIncludes;\n\n            if (result && result.total) {\n\n              missedIncludes = [];\n\n              for (let i = 0; i < remainIncludeNames.length; i++) {\n\n                let res = false;\n\n                for (let j = 0; j < result.total; j++) {\n\n                  if (result.data[j].name === remainIncludeNames[i]) {\n                    res = true;\n                    break;\n                  }\n                }\n\n                if (!res) {\n                  missedIncludes.push(remainIncludeNames[i]);\n                }\n              }\n\n            } else {\n              missedIncludes = remainIncludeNames;\n            }\n\n            logger.error('There are missing ruleset includes for this document: ' + missedIncludes +\n              '. Please make sure the ruleset include documents exist and ' +\n              'the correct access keys are configured for them.');\n\n            let errMsg = 'Ruleset Include(s) not found: ';\n            for (let i = 0; i < missedIncludes.length; i++) {\n              errMsg += missedIncludes[i];\n              if (i < missedIncludes.length - 1) {\n                errMsg += ', ';\n              }\n            }\n\n            callback({\n              status: SharedConstants.STATUS_ERROR,\n              message: errMsg\n            });\n          }\n        });\n\n      } else {\n        callback({\n          status: SharedConstants.STATUS_SUCCESS,\n          ruleFlow: ruleFlow\n        });\n      }\n\n    } else {\n\n      callback({\n        status: SharedConstants.STATUS_SUCCESS,\n        ruleFlow: ruleFlow\n      });\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class VendorLibraryService {\n\n  constructor() {}\n\n  async getVendorLibrary(name) {\n    const clientResourcesReq = new Request('api/loadVendorLibrary/' + name, { credentials: 'include' });\n    try {\n      const response = await fetch(clientResourcesReq);\n      return response.json();\n    } catch (err) {\n      return null;\n    }\n  }\n\n  async getVendorLibs() {\n    const clientResourcesReq = new Request('api/loadVendorLibraries', { credentials: 'include' });\n    try {\n      const response = await fetch(clientResourcesReq);\n      return response.json();\n    } catch (err) {\n      return null;\n    }\n  }\n\n}\n","\nimport { Injectable, DOCUMENT, inject } from '@angular/core';\nimport { ReplaySubject } from 'rxjs';\nimport { VendorLibraryService } from '../vendor-library/vendor-library.service';\nimport { SearchResultsProcessor } from '@formbird/shared';\nimport { SharedConstants } from '@formbird/types';\nimport loadjs from 'loadjs';\n\n/**\n * Angular: Load External JavaScript/Stylesheet File Dynamically\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class LazyScriptLoaderService {\n  private readonly document = inject(DOCUMENT);\n  private vendorLibraryService = inject(VendorLibraryService);\n\n\n  private loadedLibraries: { [url: string]: ReplaySubject<any> } = {};\n\n  loadScript(url: string): Promise<any> {\n\n    const _self = this;\n\n    if (_self.loadedLibraries[url]) {\n      return _self.loadedLibraries[url].toPromise();\n    }\n\n    _self.loadedLibraries[url] = new ReplaySubject();\n\n    const script = _self.document.createElement('script');\n    script.type = 'text/javascript';\n    script.async = true;\n    script.src = url;\n    script.onload = () => {\n      _self.loadedLibraries[url].next(undefined);\n      _self.loadedLibraries[url].complete();\n    };\n\n    _self.document.body.appendChild(script);\n\n    return _self.loadedLibraries[url].toPromise();\n  }\n\n  loadStyle(url: string): Promise<any> {\n\n    const _self = this;\n\n    if (_self.loadedLibraries[url]) {\n      return _self.loadedLibraries[url].toPromise();\n    }\n\n    _self.loadedLibraries[url] = new ReplaySubject();\n\n    const style = _self.document.createElement('link');\n    style.type = 'text/css';\n    style.href = url;\n    style.rel = 'stylesheet';\n    style.onload = () => {\n      _self.loadedLibraries[url].next(undefined);\n      _self.loadedLibraries[url].complete();\n    };\n\n    const head = document.getElementsByTagName('head')[0];\n    head.appendChild(style);\n\n    return _self.loadedLibraries[url].toPromise();\n  }\n\n  async load(dependencies: any) {\n    if (!dependencies || (!dependencies.name && !dependencies.documentId)) {\n      return Promise.reject(new Error('Dependencies not specified correctly in lazyLoader.load'));\n    }\n\n    let files = [];\n\n    if (!dependencies.files) {\n      let vendorLib;\n      if (dependencies.documentId) {\n        vendorLib = await this.vendorLibraryService.getVendorLibrary(dependencies.documentId);\n      } else {\n        vendorLib = await this.vendorLibraryService.getVendorLibrary(dependencies.name);\n      }\n\n      if (vendorLib) {\n        if (vendorLib.fileName) {\n          files.push(vendorLib.fileName);\n        }\n\n        if (vendorLib.fileNames) {\n          files = files.concat(vendorLib.fileNames);\n        }\n      }\n    } else {\n      files = dependencies.files;\n    }\n\n    if (!files.length) {\n      return Promise.reject(\n        new Error(`Dependencies specified in lazyLoader.load not found!`));\n    }\n\n    return await loadjs(files, {\n      returnPromise: true\n    });\n  }\n}\n","import { SharedConstants } from '@formbird/types';\nimport { UtilHttpStatus, UtilError } from '@formbird/shared';\nimport { ConfigService } from '../config/config.service';\nimport { DataService } from '../data/data.service';\nimport { Injectable, inject } from '@angular/core';\nimport { OfflineStatusService } from '../offline-status/offline-status.service';\n\nconst logger = console;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class SearchService {\n  private dataService = inject(DataService);\n  private configService = inject(ConfigService);\n  private offlineStatusService = inject(OfflineStatusService);\n\n\n  results = { data: [] };\n\n  constructor() { }\n\n  getInstance() {\n    return this;\n  }\n\n  /**\n   * Do Elastic search on server side. If the browser is offline, do searching indexedDB.\n   * @param options consists of text, filter query to search\n   * @param searchContext an object consists of additional params\n   * @returns Promise\n   */\n  search(options, searchContext?): Promise<any> {\n\n    const _self = this;\n\n    return new Promise((resolve, reject) => {\n\n      const exceedsMaxQueryLength = query => {\n        const maxSearchQueryLength = _self.configService.clientConfig().maxSearchQueryLength ||\n          SharedConstants.DEFAULT_MAX_SEARCH_QUERY_LENGTH;\n\n        if (!query) {\n          return false;\n        } else {\n          return JSON.stringify(query).length > maxSearchQueryLength;\n        }\n\n      };\n\n      if (exceedsMaxQueryLength(options.filter)) {\n        const message = 'The maximum length of a search query has been exceeded.';\n        logger.error(message);\n\n        reject(new Error(message));\n        return;\n      }\n\n      _self.dataService.search(options, searchContext).then(\n        function successFunc(returnData) {\n\n          if (returnData.statusCode !== UtilHttpStatus.OK) {\n\n            let msg = 'Search failed with status - ' + UtilHttpStatus.getStatusText(returnData.errorCode);\n\n            if (returnData.message.status === UtilHttpStatus.BAD_REQUEST + '') {\n              msg = 'Search failed with status - ' + 'filter is incorrectly set up';\n            }\n\n            reject(msg);\n\n          } else {\n\n            _self.results = returnData;\n            resolve(returnData);\n\n          }\n\n        },\n        function errorFunc(err) {\n          let message;\n\n          if (err) {\n            if (err?.name === UtilError.SERVER_UNRESPONSE_ERROR){\n              message = 'Error in search: Network connection lost';\n            } else if (!_self.offlineStatusService.shouldOperateOnline() || !_self.offlineStatusService.isConnected()){\n              message = 'Error in search: Device is offline' ;\n            } else if (err.message) {\n              message = 'Error in search: ' + err.message;\n            } else {\n              if (err.errorCode) {\n                message = 'Search failed with error: ' + err.errorCode;\n              } else {\n                message = 'Error in search. Please see an administrator';\n              }\n            }\n\n          } else {\n            message = 'Error in search. Please see an administrator';\n          }\n\n          reject(new Error(message));\n        }\n      );\n\n    });\n\n  }\n\n  generatePit() {\n    return this.dataService.generatePit();\n  }\n}\n","import { Injectable, SecurityContext } from '@angular/core';\nimport { RulesetError} from '@formbird/shared';\n\n\nconst logger = console;\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class RulesetContext {\n\n  user;\n  sharedValues;\n  modalService;\n  dataService;\n  DataService;  // used in rules for the old code convention\n  q;\n  logger;\n  ModalService;\n  hasDuplicate;\n  showNotification;\n  /**\n   * returns a boolean indicating whether the device is connected\n   */\n  isOnline;\n  updateDocument;\n  deleteDocument;\n  findDocuments;\n  findDocumentsByElastic;\n  findDocumentsBySearch;\n  /*\n   * Including ruleset processing.\n   * Include ruleset syntax: #include 'rulesetName';\n   */\n  addIncludesToRuleset;\n  createDocumentFromTemplate;\n  setSharedValue;\n  getSharedValue;\n  RulesetError;\n  processSearchResults;\n  showDialog;\n  sanitizer;\n\n  // service\n  ModifiedFieldService;\n  lazyLoader;\n  loggedInUserService;\n  clientIncludeRuleSetService;\n  documentService;\n  offlineStatusService;\n  http;\n  searchService;\n  notificationService;\n  clientAccessService;\n  searchClientService;\n  preProcessorFieldService;\n  aggregate;\n  isOnlineAsync;\n  constructor() {\n  }\n\n  loadRecords(collectionName, callback) {\n    logger.error('LoadRecords regards collectionName is not valid function.');\n  }\n\n  sanitizeHtml(html: string) {\n    return this.sanitizer.sanitize(SecurityContext.HTML, html);\n  }\n}\n","\nimport { Injectable, inject } from '@angular/core';\nimport { DataService } from '../data/data.service';\nimport { LoggedInUserService } from '../user/logged-in-user.service';\nimport { ConfigService } from '../config/config.service';\nimport { SearchService } from '../search/search.service';\nimport { HttpClient } from '@angular/common/http';\nimport { isEmpty, filter, chunk, nth, orderBy, map, isPlainObject, get, toLower,\n  isEqual, isArray, includes, isString, isFunction  } from 'lodash';\nimport { cloneDeep } from 'es-toolkit';\nimport { SharedConstants } from '@formbird/types';\nimport { SearchResultsProcessor } from '@formbird/shared';\nimport { OfflineStatusService } from '../offline-status/offline-status.service';\n\nconst logger = console;\n\nexport class SclSearchClientConstantService {\n  static operator = {\n    equals: 'eq',\n    notEquals: 'neq',\n    contains: 'contains'\n  };\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class SearchClientService {\n  private httpClient = inject(HttpClient);\n  private searchService = inject(SearchService);\n  private configService = inject(ConfigService);\n  private loggedInUserService = inject(LoggedInUserService);\n  private offlineStatusService = inject(OfflineStatusService);\n  private dataService = inject(DataService);\n\n\n  contextParams: any;\n\n\n  search(options, searchContext?) {\n\n    return new Promise(async (resolve, reject) => {\n      try {\n\n        const offlineMode = this.offlineStatusService.isCachingEnabled();\n        if (options?.searchOfflineOnly && !offlineMode) {\n          reject(new Error('Please enable caching before performing a search configured as offline only'));\n        } else {\n          let isExists: any = false;\n          if (!isEmpty(options.queryName) && options.dataSource === 'elastic') {\n            try {\n              const connected = await this.offlineStatusService.checkServerConnectionStatus();\n              if (connected) {\n                isExists = await this.isQueryDocumentExists(options.queryName, options.dataSource);\n              }\n            } catch (err) {\n              // the error will be ignored so the filter can be used\n            }\n          }\n          if (!isEmpty(options.queryName) && options.dataSource && isExists) {\n            this.executeComponentFunction(options, resolve, reject);\n          } else {\n            if (!isEmpty(options.queryName) && (options.dataSource === 'dexie' || offlineMode)) {\n              options.searchOptions = options.searchOptions ? options.searchOptions : {};\n              options.searchOptions.dexieSearchFunction = await this.getDexieSearchFunction(options);\n            } else if (options.offlineFilter) {\n              options.searchOptions = options.searchOptions ? options.searchOptions : {};\n              options.searchOptions.dexieSearchFunction = await this.parseOfflineFilter(options);\n            }\n\n            this.searchService.search(options, searchContext).then((results) => {\n              if (results.searchProvier === 'dexie') {\n                this.processDexieResults(options, results, resolve);\n              } else {\n                resolve(results);\n              }\n\n            }, (err) => {\n              reject(err);\n            });\n          }\n        }\n\n      } catch (error) {\n        reject(error);\n      }\n\n    });\n  }\n\n  getDexieSearchFunction(options): Promise<void> {\n    const self = this;\n\n    return new Promise((resolve, reject) => {\n\n      this.getDexieQuery(options.queryName, function(err, queryDocument) {\n\n        if (err) {\n          reject(err);\n        } else if (queryDocument && !isEmpty(queryDocument.filter)) {\n          let fun;\n          try {\n            let funcStr = queryDocument.filter;\n            if (options.processHandlebars) {\n               funcStr =  options.processHandlebars(queryDocument.filter, null, options.handlebarsParams);\n            }\n\n            fun = eval('(' + funcStr + ')');\n            resolve(fun);\n          } catch (err) {\n            reject(err);\n          }\n        } else {\n          resolve();\n        }\n      });\n\n    });\n  }\n\n  processDexieResults = async (options, results, resolve) => {\n\n    let docs = [];\n    let filterDocs = results.data;\n    if (filterDocs && filterDocs.length > 0) {\n\n      filterDocs = await this.filterResults(options, filterDocs);\n      if (filterDocs && filterDocs.length > 0) {\n        filterDocs = this.sortResults(options, filterDocs);\n\n        const size = options.size || options.pageSize || SharedConstants.DEFAULT_PAGE_SIZE;\n        let pageFrom;\n        if (!options.page && options.from && options.from > 0 && options.size > 0) {\n          pageFrom = options.from / options.size;\n        }\n        const page = options.page || pageFrom || SharedConstants.DEFAULT_PAGE;\n        const docsArray = chunk(filterDocs, size);\n        docs = nth(docsArray, page);\n      }\n    }\n\n    results.total = filterDocs.length;\n    results.data = docs;\n\n    resolve(results);\n\n  }\n\n  executeComponentFunction = async (options, resolve, reject) => {\n\n    const params = {\n      functionName: options.functionName ? options.functionName : 'searchByQueryName',\n      componentWebServiceName: options.componentWebServiceName ? options.componentWebServiceName : 'ws-search-service',\n      functionParameters: [options.queryName, options.dataSource, options.document, options],\n      offlineComponentLibraryName: options.offlineComponentLibraryName ? options.offlineComponentLibraryName : options.queryName\n    };\n\n    let docs = [];\n\n    let isExists: any = false;\n    if (!isEmpty(options.queryName) && options.dataSource === 'elastic') {\n      try {\n        isExists = await this.isQueryDocumentExists(options.queryName, options.dataSource);\n      } catch (err) {\n        // the error will be ignored so the filter can be used\n      }\n    }\n    if (!isExists) {\n      this.searchService.search(options).then((results) => {\n        if (results.searchProvier === 'dexie') {\n          this.processDexieResults(options, results, resolve);\n        } else {\n          resolve(results);\n        }\n\n      }, (err) => {\n        reject(err);\n      });\n    }else {\n      this.dataService.executeComponentFunction(params)\n        .then((results) => {\n          let data;\n          if (results.data && results.data.hits && results.data.hits.hits) {\n            data = results.data.hits.hits;\n          } else {\n            data = results;\n            results.total = data.length;\n            results.searchProvier = options.dataSource;\n            results.statusCode = 200;\n          }\n\n\n          if (data && data.length > 0) {\n            const size = options.size || options.pageSize || SharedConstants.DEFAULT_PAGE_SIZE;\n            let pageFrom;\n            if (!options.page && options.from && options.from > 0 && options.size > 0) {\n              pageFrom = options.from / options.size;\n            }\n            const page = options.page || pageFrom || SharedConstants.DEFAULT_PAGE;\n            const docsArray = chunk(data, size);\n            docs = nth(docsArray, page);\n          }\n\n          if (results.data && results.data.hits && results.data.hits.hits) {\n            results.data.hits.hits = docs;\n          } else {\n            results.data = docs;\n          }\n\n          resolve(results);\n\n        }, (error) => {\n          reject(error);\n        });\n    }\n\n  }\n\n\n  getDexieQuery(queryName, callback) {\n    const offlineMode = this.offlineStatusService.isCachingEnabled();\n    if (!offlineMode) {\n      callback(new Error(\"Request for Dexie query without offline enabled. Please enable caching before querying Dexie\"));\n    } else {\n      const queryDocument = async (db, callback) => {\n        try {\n\n          await db.documents.where('name').equals(queryName).and(\n            (document) => {\n              return document.systemHeader.systemType === 'query'\n                && toLower(document.searchProvider) === 'dexie'\n                && document.systemHeader.currentVersion === true;\n            }).toArray(\n            (documents) => {\n              callback(null, documents);\n            })\n\n        } catch (err) {\n          logger.error(err);\n          callback(err);\n        }\n      };\n\n      const options = { \"searchOptions\": { \"dexieSearchFunction\": queryDocument } };\n\n      this.searchService.search(options).then((results) => {\n        let qryDoc;\n        if (results && results.data && results.data.length > 0) {\n          qryDoc = results.data[0];\n        }\n        callback(null, qryDoc);\n\n      }, (err) => {\n        logger.error(err);\n        callback(err);\n      });\n    }\n  }\n\n  private async filterResults(options, documents) {\n    const self = this;\n    return new Promise(async (resolve) => {\n      let query = [];\n\n      let filterObj = options.filter;\n      if (typeof filterObj === 'string') {\n        filterObj = filterObj.replace(/'/g, '\"');\n        filterObj = JSON.parse(filterObj);\n      }\n\n      if (filterObj && !isEmpty(filterObj.dexieQuery) && isArray(filterObj.dexieQuery) && filterObj.dexieQuery.length > 0) {\n        query = cloneDeep(filterObj.dexieQuery);\n      }\n\n      const currentVerFilter = { field: 'systemHeader.currentVersion', value: true,\n        operator: SclSearchClientConstantService.operator.equals};\n      query.push(currentVerFilter);\n\n      const results = await documents.filter(function(document) {\n        let isFound = false;\n\n        for (let i = 0; i < query.length; i++ ) {\n          const queryObj = query[i];\n          if (queryObj && queryObj.field && queryObj.value) {\n            const fldValue = get(document, queryObj.field);\n            if (isEmpty(queryObj.operator) || queryObj.operator === SclSearchClientConstantService.operator.contains) {\n              isFound = includes(toLower(fldValue), queryObj.value);\n            } else if (queryObj.operator === SclSearchClientConstantService.operator.equals) {\n              isFound = isEqual(fldValue, queryObj.value) || isEqual(toLower(fldValue), queryObj.value);\n            } else if (queryObj.operator === SclSearchClientConstantService.operator.notEquals) {\n              isFound = !isEqual(toLower(fldValue), queryObj.value);\n            }\n\n          }\n          if (!isFound) {\n            break;\n          }\n        }\n\n        return isFound;\n      });\n      resolve(results);\n\n    });\n\n  }\n\n  sortResults(options, documents) {\n    let filterObj = options.filter;\n    if (typeof filterObj === 'string') {\n      filterObj = filterObj.replace(/'/g, '\"');\n      filterObj = JSON.parse(filterObj);\n    }\n\n\n    if (filterObj && filterObj.dexieSort && isPlainObject(filterObj.dexieSort)) {\n      let fieldArr; fieldArr = [];\n      let valueArr; valueArr = [];\n      map(filterObj.dexieSort, function(value, key) {\n        fieldArr.push(key);\n        valueArr.push(value);\n      });\n      documents = orderBy(documents, fieldArr, valueArr);\n    }\n\n    return documents;\n  }\n\n  getDefaultSearchProvider(context) {\n    const offlineMode = this.offlineStatusService.isCachingEnabled();\n    const clientConfig = this.configService.clientConfig();\n    this.contextParams = {\n      document: context.document,\n      doc: context.document,\n      account: context.account, // the account document from scope\n      tpl: context.template,\n      template: context.template,\n      tplItem: context.componentDefinition, // For BackCompatibility\n      componentDefinition: context.componentDefinition // the current components configuration details\n    };\n\n    if (!isEmpty(context.componentDefinition?.queryName) && offlineMode && context.componentDefinition?.searchOfflineOnly) {\n      return 'dexie';\n    } else if (context.componentDefinition?.searchProvider || context.template?.searchProvider) {\n      return context.componentDefinition?.searchProvider || context.template?.searchProvider;\n    } else if (context.componentDefinition?.defaultSearchProvider || clientConfig?.defaultSearchProvider) {\n      return context.componentDefinition?.defaultSearchProvider || clientConfig?.defaultSearchProvider;\n    } else if (!isEmpty(context.componentDefinition?.queryName)) {\n      return 'elastic';\n    } else {\n      return null;\n    }\n  }\n\n  isDexieQuery(context, queryName?) {\n\n    const offlineMode = this.offlineStatusService.isCachingEnabled();\n\n    return ( (!isEmpty(context.componentDefinition.queryName) || queryName) &&\n      (offlineMode || context.componentDefinition.searchOfflineOnly ||\n        (context.componentDefinition.searchOptions && context.componentDefinition.searchOptions.searchOfflineOnly) ));\n  }\n\n  isQueryDocumentExists(queryName, dataSource) {\n    return new Promise(async (resolve, reject) => {\n      const options = {\n        filter: `{\"query\":{\"bool\":{\"filter\":[{\"term\":{\"systemHeader.systemType\":\"query\"}},{\"term\":{\"name\":\"${queryName}\"}},` +\n          `{\"term\":{\"searchProvider\":{\"value\": \"${dataSource}\", \"case_insensitive\": true}}}]}}}`\n      };\n      try {\n        const results = await this.searchService.search(options);\n\n        SearchResultsProcessor.processSearchResults(results, (itemData, sort) => {\n\n        }, (customData, totalHits, lastSort) => {\n          resolve(totalHits > 0);\n        });\n      } catch (err) {\n        logger.error(err);\n        resolve(false);\n      }\n    });\n  }\n\n  private parseOfflineFilter(options)  {\n    const self = this;\n\n    return new Promise((resolve: any, reject) => {\n      let funcStr: any = options.offlineFilter;\n      if (!isEmpty(funcStr) && isString(funcStr)) {\n        let fun;\n        try {\n          if (options.processHandlebars) {\n            funcStr = options.processHandlebars(funcStr, null, options.handlebarsParams);\n          }\n\n          fun = eval('(' + funcStr + ')');\n\n          resolve(fun);\n        } catch (err) {\n          reject(err);\n        }\n      } else if (isFunction(funcStr)) {\n        resolve(funcStr);\n      } else {\n        resolve(null);\n      }\n\n    });\n  }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { ComponentService } from '../../component/component.service';\nimport { UtilValidation } from '@formbird/shared';\nimport { OfflineStatusService } from '../../offline-status/offline-status.service';\nimport { IndexedDBService } from '../../indexeddb/indexed-db.service';\n\nconst logger = console;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class CustomFieldPreprocessorService {\n  private componentService = inject(ComponentService);\n  private offlineStatusService = inject(OfflineStatusService);\n  private indexedDBService = inject(IndexedDBService);\n\n\n  preProcess(field, document) {\n\n    const _self = this;\n\n    return new Promise((resolve, reject) => {\n\n      _self.componentService.loadComponentDoc(field.componentName).then(\n        async function foundFunc(component: any) {\n\n          try {\n\n            const customFunc = component.clientPreprocessorFunction;\n            if (UtilValidation.hasValue(customFunc)) {\n\n              const clientPreprocessorFunc = Function('return (' + customFunc + ')')();\n              if (_self.offlineStatusService.isCachingEnabled()) {\n                await _self.setSaveFlattenedValues(field, document);\n              }\n              if (component.preprocessorIsAsynchronous) {\n\n                clientPreprocessorFunc(field, document).then(\n                  function (retVal) {\n                    resolve(retVal);\n                  },\n                  function (error) {\n                    reject(error);\n                  }\n                );\n\n              } else {\n\n                const retVal = clientPreprocessorFunc(field, document);\n                resolve(retVal);\n              }\n\n            } else {\n              resolve(document);\n            }\n\n          } catch (err) {\n            const errMsg = ('Error in running custom component preprocessor function : ' + err);\n            logger.debug(errMsg);\n            reject(errMsg);\n          }\n        },\n\n        function notFoundFunc(err) {\n          reject(err);\n        }\n      );\n    });\n\n  }\n\n  private setSaveFlattenedValues(field, document){\n    return new Promise(async (resolve, reject) => {\n        const indexes: any  = await this.indexedDBService.getIndexes();\n        if (indexes){\n          const index = indexes.find(o => o.name === `${field.name}____documentId`);\n          if (index) {\n            field.saveFlattenedValues = true;\n          }\n        }\n        resolve(true);\n    })\n  }\n  \n}\n","import { Injectable, inject } from '@angular/core';\nimport { SharedConstants } from '@formbird/types';\nimport { CustomFieldPreprocessorService } from './custom-field/custom-field-preprocessor.service';\nimport { RelatedDocumentPreprocessor } from './related-document.preprocessor';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class PreProcessorFieldService {\n  private customFieldPreprocessorService = inject(CustomFieldPreprocessorService);\n\n\n  preProcessOneField(field, document) {\n    this.customFieldPreprocessorService.preProcess(field, document);\n  }\n\n  preProcessField(template, document) {\n    if (template && template.components) {\n      for (let i = 0; i < template.components.length; i++) {\n        const field = template.components[i];\n        this.preProcessOneField(field, document);\n      }\n    }\n  }\n\n  private isCustomPreProcessor(component) {\n    return component.componentName && !component.componentName.startsWith('ft-');\n  }\n\n  preProcess(template, document) {\n\n    const _self = this;\n\n    const promises = [];\n\n    return new Promise((resolve, reject) => {\n\n      if (template && template.components) {\n\n        template.components.forEach(function (component) {\n          if (_self.isCustomPreProcessor(component)) {\n            promises.push(_self.customFieldPreprocessorService.preProcess(component, document));\n          }\n        });\n\n        if (promises.length > 0) {\n\n          Promise.all(promises).then(\n            function successFunc() {\n              resolve(promises.length);\n            },\n            function errorFunc(err) {\n              reject(err);\n            }\n          );\n\n        } else {\n          resolve(0);\n        }\n\n      } else {\n        resolve(0);\n      }\n    });\n\n  }\n\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, SecurityContext, inject } from '@angular/core';\nimport { User } from '@formbird/types';\nimport { DocumentUpdater, ESQueryUtils, RulesetError, SearchResultsProcessor, SharedUrlRoutes, UtilDocumentId } from '@formbird/shared';\nimport { isFunction, isEmpty, isObject } from 'lodash';\nimport { cloneDeep } from 'es-toolkit/object';\nimport { NotificationService } from '../notification/notification.service';\nimport { ClientIncludeRuleSetService } from './client-include-rule-set.service';\nimport { Observable } from 'rxjs';\nimport { DataService } from '../data/data.service';\nimport { LazyScriptLoaderService } from '../lazyload/lazy-script-loader.service';\nimport { LoggedInUserService } from '../user/logged-in-user.service';\nimport { DocumentService } from '../document/document.service';\nimport { OfflineStatusService } from '../offline-status/offline-status.service';\nimport { SearchService } from '../search/search.service';\nimport { ModifiedFieldService } from '../document/modified-field.service';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { select } from '../../redux/decorators/select';\nimport { RulesetContext } from './client-rule-set-context';\nimport { SharedConstants } from '@formbird/types';\nimport { ClientAccessService } from '../access/client-access.service';\nimport { SearchClientService} from '../search/search-client.service';\nimport { PreProcessorFieldService } from '../preprocessor/pre-processor-field.service';\n\nconst logger = console;\n\nfunction convertToErrorObject(error) {\n  let err = error;\n  if (typeof err === 'string') {\n    err = new Error(err);\n  }\n\n  return err;\n}\n\nconst checkAndDoPreSaveOffline = async (document, options, callback) => {\n  const unsavedDocumentService = globalThis.FormbirdServiceInjector.UnsavedDocumentService;\n  const validationService = globalThis.FormbirdServiceInjector.ValidationService;\n  const offlineStatusService = globalThis.FormbirdServiceInjector.OfflineStatusService;\n  const dataService = globalThis.FormbirdServiceInjector.DataService;\n\n  const shouldRulPreSaveOffline = !offlineStatusService.isConnected()\n    && offlineStatusService.isOfflineMode() && options.triggerPreSaveOffline !== false;\n\n  const templateId = document?.systemHeader?.templateId;\n  if (shouldRulPreSaveOffline && templateId) {\n\n    try {\n      const documentContext = {} as any;\n      documentContext.template = await dataService.getDocument(templateId);\n      documentContext.templateId = templateId;\n\n      documentContext.unsavedDocumentListId = unsavedDocumentService.createUnsavedDocumentList();\n\n      if (!documentContext.formParameters) {\n        const unsavedDocumentListId = documentContext.unsavedDocumentListId;\n        const hierarchyInfo = unsavedDocumentService.getHierarchyInfo(unsavedDocumentListId, document.documentId);\n        documentContext.formParameters = {};\n        documentContext.formParameters.hierarchyInfo = hierarchyInfo;\n        documentContext.formParameters.unsavedDocumentListId = unsavedDocumentListId;\n      }\n\n      const rulesData: any = {\n        eventName: SharedConstants.RULESET_RELATIONSHIPS.PRESAVE_OFFLINE_EVENT_NAME.name,\n        document,\n        documentContext,\n        callback,\n        shouldRun: true // bypass loadedDocument check\n      };\n\n      await validationService.executeDocumentEventPromise(rulesData);\n      callback();\n    } catch (error) {\n      const errObj = convertToErrorObject(error);\n      callback(errObj);\n    } finally {\n      validationService.setRuleStatusDone(templateId);\n    }\n  } else {\n    callback();\n  }\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ClientRulesService {\n  private dataService = inject(DataService);\n  private loggedInUserService = inject(LoggedInUserService);\n  private clientIncludeRuleSetService = inject(ClientIncludeRuleSetService);\n  private documentService = inject(DocumentService);\n  private offlineStatusService = inject(OfflineStatusService);\n  private http = inject(HttpClient);\n  private lazyScriptLoaderService = inject(LazyScriptLoaderService);\n  private searchService = inject(SearchService);\n  private notificationService = inject(NotificationService);\n  private modifiedFieldService = inject(ModifiedFieldService);\n  private clientAccessService = inject(ClientAccessService);\n  private sanitizer = inject(DomSanitizer);\n  private searchClientService = inject(SearchClientService);\n  private preProcessorFieldService = inject(PreProcessorFieldService);\n\n\n  @select(['userState', 'user']) user$: Observable<User>;\n  user: User;\n  modalService: any;\n\n  constructor() {\n    this.user$.subscribe((data: User) => this.user = data);\n  }\n\n  private sharedValues = {} as any;\n\n  async expose() {\n    const rulesetContext = new RulesetContext();\n    rulesetContext.user = this.user;\n\n    rulesetContext.sharedValues = this.sharedValues;\n\n    rulesetContext.modalService = this.modalService;\n\n    rulesetContext.dataService = this.dataService;\n\n    rulesetContext.DataService = this.dataService;  // used in rules for the old code convention\n\n    rulesetContext.ModifiedFieldService = this.modifiedFieldService;\n\n    rulesetContext.lazyLoader = this.lazyScriptLoaderService;\n\n    rulesetContext.loggedInUserService = this.loggedInUserService;\n\n    rulesetContext.clientIncludeRuleSetService = this.clientIncludeRuleSetService;\n\n    rulesetContext.documentService = this.documentService;\n\n    rulesetContext.offlineStatusService = this.offlineStatusService;\n\n    rulesetContext.http = this.http;\n\n    rulesetContext.searchService = this.searchService;\n\n    rulesetContext.notificationService = this.notificationService;\n\n    rulesetContext.q = Promise;\n\n    rulesetContext.logger = logger;\n\n    rulesetContext.ModalService = this.modalService;\n\n    rulesetContext.hasDuplicate = this.hasDuplicate;\n\n    rulesetContext.showNotification = this.showNotification;\n\n    /**\n     * returns a boolean indicating whether the device is connected\n     */\n     rulesetContext.isOnline = this.offlineStatusService.isConnected;\n\n     rulesetContext.updateDocument = this.updateDocument;\n\n     rulesetContext.deleteDocument = this.deleteDocument;\n\n     rulesetContext.findDocuments = this.findDocuments;\n\n     rulesetContext.findDocumentsByElastic = this.findDocumentsByElastic;\n\n     rulesetContext.findDocumentsBySearch = this.findDocumentsBySearch;\n\n    /*\n        * Including ruleset processing.\n        * Include ruleset syntax = #include 'rulesetName';\n        */\n    rulesetContext.addIncludesToRuleset = this.addIncludesToRuleset;\n\n    rulesetContext.createDocumentFromTemplate = this.createDocumentFromTemplate;\n\n    rulesetContext.setSharedValue = this.setSharedValue;\n\n    rulesetContext.getSharedValue = this.getSharedValue;\n\n    rulesetContext.processSearchResults = SearchResultsProcessor.processSearchResults;\n\n    rulesetContext.showDialog = this.showDialog;\n\n    rulesetContext.sanitizer = this.sanitizer;\n\n    rulesetContext.RulesetError = RulesetError;\n\n    rulesetContext.clientAccessService = this.clientAccessService;\n\n    rulesetContext.searchClientService = this.searchClientService;\n\n    rulesetContext.aggregate = this.aggregate;\n   \n    rulesetContext.isOnlineAsync = async() => { \n      return await  this.offlineStatusService.checkServerConnectionStatus();\n     };\n\n\n    rulesetContext.preProcessorFieldService = this.preProcessorFieldService;\n\n    return rulesetContext;\n  }\n\n  private hasDuplicate(templateId, duplicateCondition, IdToExclude) {\n    const _self = this;\n\n    const query = ESQueryUtils.prepareESQuery(duplicateCondition);\n    query.query.bool.must.push({ 'systemHeader.templateId': templateId });\n\n    // Execute query\n    return new Promise((resolve, reject) => {\n\n      _self.dataService.findByElastic(query).then(\n        function successFunc(results) {\n\n          // Check excluded ID\n          let result = false;\n\n          for (let i = 0; i < results.data.hits.total; i++) {\n\n            if (results.data.hits.hits[i]._source.documentId !== IdToExclude) {\n              result = true;\n              break;\n            }\n\n          }\n\n          resolve(result);\n        },\n\n        function errorFunc(err) {\n          reject(err);\n        }\n      );\n\n    });\n\n  }\n\n  private showNotification(message, status, options?) {\n    options = options || {};\n    let messageType = 'info';\n\n    // 18587#c82372 - allow options to be the second parameter\n    if (typeof status === 'object') {\n      options = status;\n      messageType = options.messageType || messageType; \n    } else {\n      messageType = status || messageType;\n    }\n\n    options.messageType = messageType.toLowerCase();\n    this.notificationService.printMessage(message, options, options?.title, { x: 'right', y: 'top' });\n  }\n\n  private updateDocument(id, change, userId, options, callback) {\n    // backward compatibility\n    if (typeof options === 'function') {\n      callback = options;\n      options = {};\n    }\n\n    const _self = this;\n\n    const doUpdateDoc = (orgDoc) => {\n      try {\n          const clonedDoc = cloneDeep(orgDoc);\n\n          DocumentUpdater.applyUpdatesSimple(clonedDoc, change);\n\n          checkAndDoPreSaveOffline(clonedDoc, options, (err) => {\n            if (err) {\n                const errObj = convertToErrorObject(err);\n                callback(errObj);\n            } else {\n              _self.dataService.jsonPatchUpdate(orgDoc, clonedDoc).then(\n                function successFunc(doc) {\n                  callback(null, doc);\n                },\n                function errorFunc(err) {\n                  const errObj = convertToErrorObject(err);\n                  callback(errObj);\n                }\n              );\n            }\n          });\n      } catch (error){\n        const errObj = convertToErrorObject(error);\n        callback(errObj);\n      }\n    }\n\n    const originalDoc = _self.documentService.getExistingDocument(id);\n    if (!originalDoc) {\n\n      _self.dataService.getDocument(id).then(\n        function successFunc(orgDoc) {\n          doUpdateDoc(orgDoc);\n        },\n        function errorFunc(err) {\n          callback(err);\n        }\n      );\n\n    } else {\n      doUpdateDoc(originalDoc);\n    }\n\n  }\n\n  private deleteDocument(id, options, callback) {\n\n    const _self = this;\n\n    if (isFunction(options)) {\n      callback = options;\n      options = null;\n    }\n\n    if (id) {\n\n      _self.dataService.destroy(id).then(\n        function successFunc(doc) {\n          callback();\n        },\n        function errorFunc(err) {\n          callback(err);\n        }\n      );\n    }\n  }\n\n  private findDocuments(query, userId, callback) {\n    logger.warn('===== Deprecated function: findDocuments. Use findDocumentsByElastic instead. =====');\n    logger.warn('Passing userId to findDocuments is ignored. The logged in user will be used');\n\n    const queryString = '?q=' + JSON.stringify(query);\n    const url = SharedUrlRoutes.serverRoutes.loadDocsForRulesBaseUrl + '/' + userId + queryString;\n\n    this.http.get(url).subscribe(\n      (response) => {\n        callback(null, response);\n\n      },\n      (err) => {\n        callback(err);\n      });\n  }\n\n  addIncludesToRuleset(ruleFlow, callback) {\n    this.clientIncludeRuleSetService.addIncludesToRuleset(ruleFlow, callback);\n  }\n\n  private createDocumentFromTemplate(docInfo, templateId, userId, options, callback) {\n    // backward compatibility\n    if (typeof options === 'function') {\n      callback = options;\n    }\n\n    const _self = this;\n    const loggedInUserId = this.user.account.documentId;\n\n    docInfo = cloneDeep(docInfo); // #20712 - clone to solve problem with proxies offline \n    \n    if (userId && userId !== loggedInUserId) {\n      logger.warn('Logged in user id will be used rather than the user id parameter ' +\n        'passed to createDocumentFromTemplate');\n    }\n\n    if (!docInfo.documentId) {\n      docInfo.documentId = UtilDocumentId.generateId();\n    }\n\n    if (!docInfo.systemHeader) {\n      docInfo.systemHeader = {};\n    }\n    if (!docInfo.systemHeader.systemType) {\n      docInfo.systemHeader.systemType = SharedConstants.SYSTEM_TYPE_DOCUMENT;\n    }\n    docInfo.systemHeader.templateId = templateId;\n\n    this.dataService.getDocument(templateId, SharedConstants.SYSTEM_TYPE_TEMPLATE).then(\n      function successFunc(template) {\n        _self.clientAccessService.writeKeysToDocument(docInfo, template);\n\n        checkAndDoPreSaveOffline(docInfo, options, (err) => {\n          if (err) {\n            const errObj = convertToErrorObject(err);\n            callback(errObj);\n          } else {\n            _self.preProcessorFieldService.preProcess(template, docInfo).then(() => {\n              return _self.dataService.insert(docInfo);\n            }).then(function successFunc(result) {\n              callback(null, result);\n            }).catch((err) => {\n              callback(err);\n            });\n          }\n        });\n      },\n      function errorFunc(err) {\n        callback(err);\n      }\n    );\n  }\n\n  private aggregate(query) {\n    return this.dataService.aggregate(query);\n  }\n\n  public setSharedValue(key, value) {\n    this.sharedValues[key] = value;\n  }\n\n  public getSharedValue(key) {\n    return this.sharedValues[key];\n  }\n\n  findDocumentsBySearch(query, userId, searchContext, options, callback) {\n\n    const _self = this;\n\n    if (isFunction(searchContext)) {\n      callback = searchContext;\n      searchContext = {};\n    }\n    if (isFunction(options)) {\n      callback = options;\n      options = {};\n    }\n\n    if (userId) {\n      logger.warn('Passing userId to findDocumentsBySearch is ignored. The logged in user will be used');\n    }\n\n    options = isObject(options) ? options : {};\n    options.filter = query;\n\n    _self.searchClientService.search(options, searchContext).then(\n      function successFunc(data) {\n        callback(null, data);\n      },\n      function errorFunc(err) {\n        _self.notificationService.printMessage(err.message, 'error');\n        callback(err);\n      }\n    );\n\n  }\n\n  findDocumentsByElastic(query, userId, searchContext, options, callback) {\n    this.findDocumentsBySearch(query, userId, searchContext, options, callback);\n  }\n\n  showDialog(message, errorType, succFunc, errorFunc, discardFunc) {\n\n    this.modalService.showDialog(message, errorType, succFunc, errorFunc, discardFunc);\n\n  }\n\n  /** set the modal service. This is set from the application importing the @formbird/services\n   *  library so that a native app can set its own implementation of ModalService\n   */\n  setModalService(modalService: any) {\n    this.modalService = modalService;\n  }\n  \n}\n","export class LatestDocumentService {\n\n  private static instance: LatestDocumentService;\n\n  public latestDocuments: any = {};\n\n  constructor() { }\n\n  public static getInstance(): LatestDocumentService {\n    if (!LatestDocumentService.instance) {\n      LatestDocumentService.instance = new LatestDocumentService();\n    }\n\n    return LatestDocumentService.instance;\n\n  }\n\n  public getLatestDocument(documentId: string) {\n    return this.latestDocuments[documentId];\n  }\n\n}\n","import { isEqual } from 'lodash';\nimport { cloneDeep } from 'es-toolkit';\nimport { LatestDocumentService } from '../document/latest-document.service';\n\nexport class ProxyEngineService {\n  \n  private static instance: ProxyEngineService;\n\n  latestDocumentService: LatestDocumentService;\n\n  private constructor() {\n    this.latestDocumentService = LatestDocumentService.getInstance();\n  }\n\n  public static getInstance() {\n    if (!ProxyEngineService.instance) {\n      ProxyEngineService.instance = new ProxyEngineService();\n    }\n\n    return this.instance;\n  }\n\n  setProxyForDocument = (originalDoc, documentContext, ruleEngine) => {\n    const _self = this;\n\n    const arrayHandler = function (fldName, oldValue) {\n\n      let shouldIgnoreBuiltinSetting = false;\n\n      return {\n        get: function (obj, prop) {\n\n          if (prop === 'length') {\n            return obj[prop];\n          }\n\n          const newObj = cloneDeep(obj);\n\n          const notifyChanges = function () {\n            ruleEngine.attachChangedField(originalDoc, fldName, newObj, oldValue, documentContext);\n            console.log(`Setting value for array field: ${fldName} - old value: ${oldValue} - new value: ${newObj}`);\n          };\n\n          const func = obj[prop];\n\n          if (typeof func === 'function') {\n\n            if (prop === 'pop') {\n\n              return function (...args) {\n\n                newObj.pop();\n\n                notifyChanges();\n\n                return func.apply(obj, args);\n              }\n            }\n\n            if (prop === 'shift') {\n\n              return function (...args) {\n\n                newObj.shift();\n\n                notifyChanges();\n\n                shouldIgnoreBuiltinSetting = true;\n\n                const res = func.apply(obj, args);\n\n                shouldIgnoreBuiltinSetting = false;\n\n                return res;\n              };\n            }\n\n            if (prop === 'unshift') {\n\n              return (...args) => {\n\n                newObj.unshift(...args);\n\n                notifyChanges();\n\n                return func.apply(obj, args);\n              }\n            }\n\n            if (prop === 'splice') {\n\n              return (...args) => {\n\n                newObj.splice(...args);\n\n                notifyChanges();\n\n                return func.apply(obj, args);\n              }\n            }\n          }\n\n          if (['[object Object]'].indexOf(Object.prototype.toString.call(obj[prop])) > -1) {\n            return new Proxy(obj[prop], nestedObjectHandler(fldName, oldValue));\n          }\n          if (Array.isArray(obj[prop])) {\n            return new Proxy(obj[prop], arrayHandler(fldName, oldValue));\n          }\n\n          return obj[prop];\n        },\n        set: function (obj, prop, value) {\n\n          obj[prop] = value;\n\n          if (prop === 'length' || shouldIgnoreBuiltinSetting) {\n            return true;  // ignore inside variable of array\n          }\n\n          const newValue = originalDoc[fldName];\n          if (!isEqual(oldValue, newValue)) {\n            ruleEngine.attachChangedField(originalDoc, fldName, newValue, oldValue, documentContext);\n            console.log(`Setting value for array field: ${fldName} - value: ${newValue}`);\n          }\n\n          return true;\n        }\n      };\n    }\n\n    const nestedObjectHandler = function (fldName, oldValue) {\n      return {\n        get: function (obj, prop) {\n          if (['[object Object]'].indexOf(Object.prototype.toString.call(obj[prop])) > -1) {\n            return new Proxy(obj[prop], nestedObjectHandler(fldName, oldValue));\n          }\n          if (Array.isArray(obj[prop])) {\n            return new Proxy(obj[prop], arrayHandler(fldName, oldValue));\n          }\n          return obj[prop];\n        },\n        set: function (obj, prop, value) {\n          obj[prop] = value;\n\n          const newValue = originalDoc[fldName];\n          if (!isEqual(oldValue, newValue)) {\n            ruleEngine.attachChangedField(originalDoc, fldName, newValue, oldValue, documentContext);\n            console.log(`Setting value for field: ${fldName} - value: ${newValue}`);\n          }\n\n          return true;\n        }\n      };\n    };\n\n    const fieldsChangedByRuleset = {\n      set: function (document, fldName, newValue) {\n\n        ruleEngine.attachChangedField(document, fldName, newValue, document[fldName], documentContext);\n\n        Reflect.set(document, fldName, newValue);\n\n        console.log(`Setting value for field: ${fldName} - value: ${newValue}`);\n\n        return true;\n      },\n      deleteProperty(document, fldName) {\n\n        ruleEngine.attachChangedField(document, fldName, undefined, document[fldName], documentContext);\n\n        Reflect.deleteProperty(document, fldName);\n\n        return true;\n      },\n      defineProperty: function (document, fldName, descriptor) {\n\n        ruleEngine.attachChangedField(document, fldName, descriptor.value, document[fldName], documentContext);\n\n        Reflect.defineProperty(document, fldName, descriptor);\n\n        return document;\n      },\n      get: function (document, fldName) {\n\n        const doc = _self.latestDocumentService.latestDocuments && _self.latestDocumentService.latestDocuments[originalDoc?.documentId]\n          ? _self.latestDocumentService.latestDocuments[originalDoc?.documentId] : originalDoc;\n        let oldValue;\n\n        if (doc && doc[fldName]) {\n          oldValue = cloneDeep(doc[fldName]);\n        }\n\n        if ((['[object Object]'].indexOf(Object.prototype.toString.call(document[fldName])) > -1) && document[fldName] !== null) {\n\n          return new Proxy(document[fldName], nestedObjectHandler(fldName, oldValue));\n\n        } else if ((['[object Array]'].indexOf(Object.prototype.toString.call(document[fldName])) > -1) && document[fldName] !== null) {\n\n          return new Proxy(document[fldName], arrayHandler(fldName, oldValue));\n\n        } else {\n          return document[fldName];\n        }\n\n      }\n    };\n\n    return new Proxy(originalDoc, fieldsChangedByRuleset);\n\n  };\n\n}\n","import { Injectable } from '@angular/core';\n\nexport interface RulesetCacheInfo {\n  rulesetId: string;\n  rulesetScriptFunc: Function;\n}\n\nexport interface RulesetCache {\n  // key will be the documentId of the ruleset or rulesetInclude document that is cached\n  [key: string]: RulesetCacheInfo;\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class RuleCacheService {\n  loadedRulesets: RulesetCache = {\n  }\n\n  // loadedRulesetIncludes: RulesetCache = {\n  // }\n\n  constructor() { }\n\n  setRuleset(documentId: string, rulesetScript: Function) {\n    if (documentId && rulesetScript) {\n      let rulesetInfo: RulesetCacheInfo = {\n        rulesetId: documentId,\n        rulesetScriptFunc: rulesetScript\n      };\n\n      this.loadedRulesets[documentId] = rulesetInfo;\n    }\n  }\n\n  // setRulesetInclude(documentId: string, rulesetIncludeScript: string) {\n  //   if (documentId && rulesetScript) {\n  //     let rulesetInfo: RulesetCacheInfo = {\n  //       rulesetScript: rulesetIncludeScript\n  //     };\n\n  //     this.loadedRulesetIncludes[documentId] = rulesetInfo;\n  //   }\n  // }\n\n  getRuleset(documentId: string): RulesetCacheInfo {\n    return documentId ? this.loadedRulesets[documentId] : null;\n  }\n\n  // getRulesetInclude(documentId: string): RulesetCacheInfo {\n  //   return documentId ? loadedRulesetIncludes[documentId] : null;\n  // }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { RuleHelper } from '@formbird/shared';\nimport { ChangeSourceType, DocumentChangedInfo, SharedConstants } from '@formbird/types';\nimport { cloneDeep } from 'es-toolkit';\nimport { LocalStorageKeys } from '../../constants/LocalStorageKeys';\nimport { formDocumentChanged } from '../../redux/actions';\nimport { ReduxStoreService } from '../../redux/store/redux-store.service';\nimport { ConfigService } from '../config/config.service';\nimport { DocumentSessionService } from '../document/document-session.service';\nimport { ModifiedFieldService } from '../document/modified-field.service';\nimport { UnsavedDocumentService } from '../document/unsaved-document.service';\nimport { OfflineStatusService } from '../offline-status/offline-status.service';\nimport { LocalStorageService } from '../storage/local-storage/local-storage.service';\nimport { LoggedInUserService } from '../user/logged-in-user.service';\nimport { ClientRulesService } from './client-rules.service';\nimport { ProxyEngineService } from './proxy-engine.service';\nimport { RuleCacheService } from './rule-cache.service';\nimport { getStore } from '../../redux/store/store';\n\nconst logger = console;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class RuleEngineService {\n  private clientRulesService = inject(ClientRulesService);\n  private configService = inject(ConfigService);\n  private localStorageService = inject(LocalStorageService);\n  private documentSessionService = inject(DocumentSessionService);\n  private reduxStoreService = inject(ReduxStoreService);\n  private ruleCacheService = inject(RuleCacheService);\n  private offlineStatusService = inject(OfflineStatusService);\n  private loggedInUserService = inject(LoggedInUserService);\n  private modifiedFieldService = inject(ModifiedFieldService);\n  private unsavedDocumentService = inject(UnsavedDocumentService);\n\n\n  proxyEngineService: ProxyEngineService;\n\n  constructor() {\n    this.proxyEngineService = ProxyEngineService.getInstance();\n  }\n\n  /*\n   * Process Rule flow string\n   * @document - document object\n   * @documentContext - additional objects will be used in rules\n   * @ruleFlowInfo - rules flow as an object contains rulesetId and its script\n   * @scope - additional scope objects will be plugged in to rules scope\n   */\n\n  async processRuleFlow(document, documentContext, ruleFlowInfo, ruleScope, callback) {\n\n    const _self = this;\n\n    const thisScope = await this.clientRulesService.expose();\n\n    if (ruleScope) {\n\n      Object.keys(thisScope).forEach(function (key) {\n        ruleScope[key] = thisScope[key];\n      });\n\n      if (!documentContext) {\n        documentContext = {};\n      }\n\n      const documentId = document.documentId;\n      documentContext.logger = logger;\n      documentContext.appVersion = _self.localStorageService.getItem(LocalStorageKeys.APP_VERSION);\n      documentContext.databaseMode = _self.configService.clientConfig().defaultSearchProvider;\n      documentContext.documentSession = this.documentSessionService.getDocumentSession(documentId);\n      documentContext.isOnline = () => { return _self.offlineStatusService.offlineStatus.connected; };\n      documentContext.isCachingEnabled = () => { return _self.offlineStatusService.isCachingEnabled(); };\n      documentContext.isModal = documentContext.formParameters?.isModal ? true : false;\n      documentContext.clientConfig = _self.configService.clientConfig();\n\n      documentContext.isOnlineAsync = async() => { \n        return await  this.offlineStatusService.checkServerConnectionStatus();\n       };\n\n      function process(rulesetScriptFunc) {\n        if (rulesetScriptFunc) {\n\n          //defining proxy for document to get the changed fields from the ruleset.\n          const proxyDocument = _self.proxyEngineService.setProxyForDocument(document, documentContext, _self);\n\n          RuleHelper.processJsonRuleset(proxyDocument, documentContext, rulesetScriptFunc, ruleScope,\n            function (result) {\n              _self.documentSessionService.setDocumentSession(documentId, documentContext.documentSession);\n              callback(result);\n            });\n        }\n      }\n\n      let rulesetCacheInfo = this.ruleCacheService.getRuleset(ruleFlowInfo.rulesetId);\n      if (!rulesetCacheInfo || !rulesetCacheInfo?.rulesetScriptFunc) {\n\n        _self.clientRulesService.addIncludesToRuleset(ruleFlowInfo.ruleSetDSL, function (processedRuleFlowResult) {\n\n          if (processedRuleFlowResult.status === SharedConstants.STATUS_ERROR) {\n\n            callback(processedRuleFlowResult);\n\n          } else {\n\n            const processedRuleFlow = processedRuleFlowResult.ruleFlow;\n            if (processedRuleFlow) {\n              // Parse the rulesetScript into a JSON object of functions\n              const ruleset = Function('return (' + processedRuleFlow + ')')();\n\n              _self.ruleCacheService.setRuleset(ruleFlowInfo.rulesetId, ruleset);\n\n              process(ruleset);\n\n            } else {\n              callback();\n            }\n          }\n        });\n\n      } else {\n\n        process(rulesetCacheInfo.rulesetScriptFunc);\n\n      }\n\n    }\n  }\n\n  dispatchChangedAction(dispatchedChangedActions) {\n    const fieldNames = Object.keys(dispatchedChangedActions);\n    if (fieldNames.length) {\n      fieldNames.forEach(fieldName => {\n        const action = dispatchedChangedActions[fieldName];\n        console.log('Dispatching onfieldchange for field: ' + fieldName + ' - value: ' + action.payload.documentChangedInfo.newValue);\n        this.reduxStoreService.getStore().dispatch(action);\n      });\n    }\n  }\n\n  // attachChangedField is passed to setProxyForDocument\n  attachChangedField(document, fldName, newValue, oldValue, documentContext) {\n\n    const documentId = document.documentId;\n\n    let clonedNewVal = newValue;\n    let clonedOldVal = oldValue;\n    if (['[object Object]', '[object Array]'].indexOf(Object.prototype.toString.call(newValue)) > -1) {\n      clonedNewVal = cloneDeep(newValue);\n    }\n    if (['[object Object]', '[object Array]'].indexOf(Object.prototype.toString.call(oldValue)) > -1) {\n      clonedOldVal = cloneDeep(oldValue);\n    }\n\n    if (this.isChangedTemplateFieldValue(fldName, documentContext.template )) {\n\n      const currentChangedFields = documentContext.changedFields;\n      const changedFields = documentContext.changedFields ? cloneDeep(currentChangedFields) : [];\n      const sourceType = documentContext.changeSourceType;\n\n      let shouldTrackChangeDoc = true;  // 15618: change to false in order to change value in store without firing onfieldchange when setting document values from non-onfieldchange rules\n      const isDocLoaded = this.unsavedDocumentService.documentIsLoaded(documentId);\n      if (!isDocLoaded) {\n        shouldTrackChangeDoc = false;\n      } else {\n        const eventName = documentContext.eventName;\n        const onPreRenderName = SharedConstants.RULESET_RELATIONSHIPS.PRERENDER_EVENT_NAME.name;\n        const onLoadName = SharedConstants.RULESET_RELATIONSHIPS.ONLOAD_EVENT_NAME.name;\n        const onFieldChangeName = SharedConstants.RULESET_RELATIONSHIPS.ON_FIELD_CHANGE_EVENT_NAME.name;\n\n        const isFromOnFieldChange = eventName === onFieldChangeName && documentContext.fieldChanged;\n        const isFromHTMLEventListener = !sourceType && changedFields.length === 0 && (eventName === onPreRenderName || eventName === onLoadName);\n        if (!isFromHTMLEventListener && !isFromOnFieldChange) {\n          shouldTrackChangeDoc = false;\n        }\n      }\n\n      if (sourceType === ChangeSourceType.RULESET && (changedFields.includes(fldName) || documentContext.fieldChanged === fldName)) {\n        //Stop the looping OnFieldChange on the current field\n        return;\n      }\n\n      if (sourceType === ChangeSourceType.COMPONENT) {\n        changedFields.push(documentContext.fieldChanged);\n      }\n      changedFields.push(fldName);\n\n      console.log('Dispatching onfieldchange for field: ' + fldName + ' - old value: ' + clonedOldVal + ' - new value: ' + clonedNewVal);\n\n      // The sourceType value always be set when a change was originated from component or push. If not defined, it should be from ruleset. \n      // It was tested by making a change from a timeout in OnLoad\n      const tartgetChangeSourceEvent = sourceType !== undefined ? documentContext.changeSourceEvent : ChangeSourceType.RULESET;\n\n      const documentChangedInfo: DocumentChangedInfo = {\n        documentId,\n        fieldName: fldName,\n        newValue: clonedNewVal,\n        oldValue: clonedOldVal,\n        isInitValue: !shouldTrackChangeDoc,\n        formParameters: documentContext.formParameters,\n        sourceType: ChangeSourceType.RULESET,\n        sourceEvent: tartgetChangeSourceEvent,\n        changedFields: changedFields\n      };\n      this.reduxStoreService.getStore().dispatch(formDocumentChanged(documentChangedInfo));\n\n    } else {\n      const documentChangedInfo: DocumentChangedInfo = {\n        documentId,\n        fieldName: fldName,\n        newValue: clonedNewVal,\n        isInitValue: true,\n        formParameters: documentContext.formParameters,\n        sourceType: ChangeSourceType.RULESET,\n        changedFields: documentContext.changedFields\n      };\n      this.reduxStoreService.getStore().dispatch(formDocumentChanged(documentChangedInfo));\n\n    }\n\n    if (this.unsavedDocumentService.documentIsLoaded(documentId)) {\n      const component = documentContext.template?.components?.filter(comp => comp?.name === fldName)[0] || {};\n      const unsavedDocumentListId = documentContext.formParameters.unsavedDocumentListId;\n\n      if (Object.keys(component).length && !component.disableSave && !component.disableDirty && documentContext.changeSourceEvent !== ChangeSourceType.DOCUMENT_PUSH) {\n        this.modifiedFieldService.addModifiedField(documentId, fldName, unsavedDocumentListId);\n      }\n    }\n\n  }\n\n  private isChangedTemplateFieldValue(field, template) {\n    let flag = false;\n    for (let i = 0; i < template.components.length; i++) {\n      if (template.components[i].name === field) {\n        flag = true;\n        break;\n      }\n    }\n\n    return flag;\n  }\n\n}\n","import { Injectable } from '@angular/core';\nimport { UrlBasePathUtil } from '../../utils/UrlBasePathUtil';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class TabService {\n\n  constructor() {\n  }\n\n  openNewDocument(templateId: string, initialData, newTab: string | boolean, callback: Function) {\n    if (!callback) {\n      callback = function() {\n      };\n    }\n\n    let target = '_blank';\n\n    if ((newTab && newTab !== null && newTab === 'no') || newTab === false) {\n      target = '_self';\n    }\n\n    const initialDataKey = 'initialData:' + templateId;\n    localStorage.setItem(UrlBasePathUtil.basePath + initialDataKey, JSON.stringify(initialData));\n\n    callback();\n    window.open('form/' + templateId, target);\n  }\n}\n","import { Injectable, OnDestroy, inject } from '@angular/core';\nimport { UtilConflict, UtilError, UtilRules, UtilValidation } from '@formbird/shared';\nimport { UtilSequenceProcess } from '@formbird/shared';\nimport { ChangeSourceType, DocumentChangedInfo, SharedConstants, User } from '@formbird/types';\nimport { includes, isEqual } from 'lodash';\nimport { cloneDeep } from 'es-toolkit';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { concatMap } from 'rxjs/operators';\nimport { ClientConstants } from '../../constants/ClientConstants';\nimport { formSetDocument, formSetRulesStatus } from '../../redux/actions';\nimport { select } from '../../redux/decorators/select';\nimport { IApplicationState } from '../../redux/state/application.state';\nimport { AppStore } from '../../redux/store/app.store';\nimport { ClientAccessService } from '../access/client-access.service';\nimport { BroadcastService } from '../broadcast/broadcast.service';\nimport { ConfigService } from '../config/config.service';\nimport { CurrentDocumentService } from '../document/current-document.service';\nimport { DocumentService } from '../document/document.service';\nimport { ModifiedFieldService } from '../document/modified-field.service';\nimport { UnsavedDocumentService } from '../document/unsaved-document.service';\nimport { NotificationService } from '../notification/notification.service';\nimport { RuleContext } from '../rules/client-rule-context';\nimport { RuleEngineService } from '../rules/rule-engine.service';\nimport { TabService } from '../tab/tab.service';\nimport { KeyValueStorageService } from '../key-value-storage/key-value-storage.service';\n\nconst logger = console;\n\nexport interface RulesData {\n  eventName: string;\n  document: any;\n  documentContext: any;\n  callback?: any;\n  error?: any;\n  results?: any;\n  rulesetCount?: number;\n  shouldRun?: boolean;\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ValidationService implements OnDestroy {\n  private documentService = inject(DocumentService);\n  private unsavedDocumentService = inject(UnsavedDocumentService);\n  private notificationService = inject(NotificationService);\n  private modifiedFieldService = inject(ModifiedFieldService);\n  private ruleEngineService = inject(RuleEngineService);\n  private currentDocumentService = inject(CurrentDocumentService);\n  private configService = inject(ConfigService);\n  private broadcastService = inject(BroadcastService);\n  private tabService = inject(TabService); // do not remove. Used in ClientRuleContext\n  private clientAccessService = inject(ClientAccessService); // do not remove. Used in ClientRuleContext\n  private appStore = inject<AppStore<IApplicationState>>(AppStore);\n  private keyValueStorageService = inject(KeyValueStorageService);\n\n  @select(['formState', 'documentChangedInfo']) documentChangedInfo$: Observable<DocumentChangedInfo>;\n  @select(['userState', 'user']) user$: Observable<User>;\n\n  private subs: Subscription = new Subscription();\n\n  documentData: any;\n  user: User;\n\n  /***------------------- Exported data -------------------------***/\n  public validationCtrlValues = {};\n\n  /***------------------- Local data ----------------------------***/\n  public eventList = {};\n\n  private pendingSave = null;\n\n  private queue = new Subject<RulesData>();\n\n  constructor() {\n\n    const subDocData = this.currentDocumentService.documentData$.subscribe(data => {\n      this.documentData = data;\n    });\n\n    const subUser = this.user$?.subscribe((user: User) => this.user = user);\n\n    const documentChangedSub = this.documentChangedInfo$?.subscribe((documentChangedData: DocumentChangedInfo) => {\n        if (documentChangedData && documentChangedData.sourceEvent === undefined) {\n          documentChangedData.sourceEvent = ChangeSourceType.COMPONENT;\n        }\n      \n        this.handleOnFieldChange(documentChangedData);\n      });\n\n    const results = this.queue.pipe(\n      concatMap((rulesData: RulesData) => {\n        return this.executeDocumentEventPromise(rulesData);\n      }));\n    const ruleSub = results.subscribe((data: RulesData) => {\n      if (data.rulesetCount) {\n        logger.info(`%c${data?.rulesetCount} ${data?.eventName} rules done for document: ${data?.document?.documentId}`,\n          `color:green`);\n      }\n\n      this.setRuleStatusDone(data?.documentContext?.templateId);\n\n      data.callback(data.error, data.results);\n    });\n\n    this.subs.add(subDocData);\n    this.subs.add(subUser);\n    this.subs.add(documentChangedSub);\n    this.subs.add(ruleSub);\n  }\n\n  ngOnDestroy() {\n    this.subs.unsubscribe();\n  }\n\n  /***------------------- Exported functions --------------------***/\n  loadValidators(tplItem, fieldName) {\n\n    const validators = [];\n\n    const required = {\n      'name': ClientConstants.VALIDATION_REQUIRED_KEY,\n      'text': ClientConstants.VALIDATION_REQUIRED_MESSAGE\n    };\n    validators.push(required);\n\n    const minLength = {\n      'name': ClientConstants.VALIDATION_MIN_LENGTH_KEY,\n      'text': ClientConstants.VALIDATION_MIN_LENGTH_MESSAGE.replace(/%s/g, tplItem.minLength)\n    };\n    validators.push(minLength);\n\n    const maxLength = {\n      'name': ClientConstants.VALIDATION_MAX_LENGTH_KEY,\n      'text': ClientConstants.VALIDATION_MAX_LENGTH_MESSAGE.replace(/%s/g, tplItem.maxLength)\n    };\n    validators.push(maxLength);\n\n    return validators;\n  }\n\n  waitPendingEvents(save) {\n\n    logger.info('ModifiedFieldService.formDirty.validating ' + this.modifiedFieldService.formDirty.validating);\n\n    if (this.modifiedFieldService.formDirty.validating) {\n\n      this.modifiedFieldService.setShowSpinner(true);\n      this.modifiedFieldService.setDirty(false);\n\n      this.pendingSave = save;\n\n    } else {\n      save();\n    }\n  }\n\n  setRuleStatusDone(templateId) {\n    this.appStore.dispatch(formSetRulesStatus(templateId, ClientConstants.RULES_STATUS_DONE));\n  }\n\n  private updateDocumentToStore(prevDocument, document, ruleContext) {\n    const diffs = UtilConflict.getDiffs(prevDocument, document);\n\n    if (diffs && diffs.length) {\n      this.dispatchStoreAction(formSetDocument(document));\n    }\n  }\n\n  private handleOnFieldChange(documentChangedData: DocumentChangedInfo) {\n\n    if (documentChangedData) {\n      const state = this.appStore.getState().formState;\n      const documentId = documentChangedData.documentId;\n      const document = cloneDeep(state.documents[documentId]);\n      const fieldName = documentChangedData.fieldName;\n      const formParameters = documentChangedData.formParameters;\n      const template = this.documentService.getloadedTemplateForDoc(document, formParameters)\n      const component = template?.components?.filter(comp => comp.name === fieldName)[0] || {};\n\n      if (documentChangedData.shouldCompareValues !== false) {\n\n        if (isEqual(documentChangedData.newValue, documentChangedData.oldValue) ||\n          (!UtilValidation.hasValue(documentChangedData.oldValue) &&\n            !UtilValidation.hasValue(documentChangedData.newValue))) { // first run.\n          return;\n        }\n\n        const isChanged = this.modifiedFieldService.isChangedField(documentId, fieldName, formParameters.unsavedDocumentListId);\n        if (!isChanged && isEqual(documentChangedData.newValue, documentChangedData.oldValue)) {\n          return;\n        }\n      }\n\n      if (Object.keys(component).length && !component.disableSave && !component.disableDirty && documentChangedData.sourceEvent !== ChangeSourceType.DOCUMENT_PUSH) {\n        this.modifiedFieldService.addModifiedField(documentId, fieldName, formParameters.unsavedDocumentListId);\n      }\n\n      const orgValue = this.appStore.getState().formState.orgDocuments[documentId][fieldName];\n\n      const docContext = {} as any;\n      docContext.fieldChanged = fieldName;\n      docContext.originValue = orgValue;\n      docContext.newValue = cloneDeep(documentChangedData.newValue);\n      docContext.oldValue = cloneDeep(documentChangedData.oldValue);\n      docContext.templateId = template.documentId;\n      docContext.formParameters = formParameters;\n      docContext.template = template;\n      docContext.databaseMode = this.configService.clientConfig().defaultSearchProvider;\n      docContext.changeSourceType = documentChangedData.sourceType;\n      docContext.changeSourceEvent = documentChangedData.sourceEvent;\n      docContext.changedFields = documentChangedData.changedFields;\n\n      this.validateChangedField(component, document, template, documentChangedData.newValue, docContext);\n    }\n  }\n\n  executeOnFieldChangeWithNoChanges(documentChangedInfo: DocumentChangedInfo) {\n    this.handleOnFieldChange(documentChangedInfo);\n  }\n\n  private executeOnFieldChange(document, docContext) {\n\n    if (this.modifiedFieldService.formDirty.dirty) {\n      const key = `FB-CORE-WIP-${document.documentId}`;\n      this.keyValueStorageService.setItem(key, { document, updated: new Date() });\n    }\n\n    const _self = this;\n\n    const currentValidating = new Date();\n    _self.modifiedFieldService.formDirty.validating = currentValidating;\n\n    _self.executeDocumentEvent(SharedConstants.RULESET_RELATIONSHIPS.ON_FIELD_CHANGE_EVENT_NAME.name, document, docContext,\n      function (error, result) {\n\n        if (result) {\n\n          _self.broadcastValidationEvent();\n\n        }\n\n        if (_self.modifiedFieldService.formDirty.validating === currentValidating) {\n          if (_self.pendingSave !== null) {\n            _self.pendingSave();\n          }\n\n          _self.modifiedFieldService.formDirty.validating = null;\n          _self.pendingSave = null;\n        }\n      });\n  }\n\n  private validateChangedField(component, document, template, newValue, docContext) {\n\n    const fieldName = component.name;\n\n    this.initFieldValidator(document, template, component, fieldName, newValue);\n\n    this.executeOnFieldChange(document, docContext);\n  }\n\n  validateChangedFieldValues(scope, originValue, newValue, oldValue) {\n\n    const tplField = scope.tplItem;\n    const fieldName = scope.fieldName;\n\n    const document = scope.doc;\n    const template = scope.tpl;\n\n    this.initFieldValidator(document, template, tplField, fieldName, newValue);\n\n    const docContext = {} as any;\n    docContext.fieldChanged = fieldName;\n    docContext.originValue = originValue;\n    docContext.newValue = newValue;\n    docContext.oldValue = oldValue;\n    docContext.templateId = scope.tplId;\n    docContext.formParameters = scope.formParameters;\n    docContext.template = scope.tpl;\n    docContext.databaseMode = this.configService.clientConfig().defaultSearchProvider;\n\n\n    this.executeOnFieldChange(scope.doc, docContext);\n  }\n\n  preRenderDocument(document, docContext, callback) {\n    this.executeDocumentEvent(SharedConstants.RULESET_RELATIONSHIPS.PRERENDER_EVENT_NAME.name, document, docContext, callback);\n  }\n\n  preDeleteClient(document, docContext, callback) {\n    this.executeDocumentEvent(SharedConstants.RULESET_RELATIONSHIPS.PREDELETE_CLIENT_EVENT_NAME.name, document, docContext, callback);\n  }\n\n  onLoadDocument(document, docContext, callback) {\n\n    const template = docContext.template;\n\n    // reset validation values due to template/document OnLoad\n    this.validationCtrlValues[document.documentId] = {\n      templateId: template.documentId\n    };\n\n    this.executeDocumentEvent(SharedConstants.RULESET_RELATIONSHIPS.ONLOAD_EVENT_NAME.name, document, docContext, callback);\n  }\n\n  private doAuthRules(ruleName, document, docContext, callback) {\n    docContext = docContext || {};\n    const templateId = document?.systemHeader?.templateId;\n    if (!templateId) {\n      callback(ruleName + \" no template for \" + document.documentId);\n    }\n\n    docContext.templateId = templateId;\n    docContext.formParameters = { unsavedDocumentListId : this.unsavedDocumentService.createUnsavedDocumentList() };\n\n    this.documentService.getDocumentOnly(document?.systemHeader?.templateId).then(template => {\n      docContext.template = template;\n      this.executeDocumentEvent(ruleName, document, docContext, callback);\n    }).catch(error => {\n      if (error.name === UtilError.FORBIDDEN_ERROR) {\n        logger.warn('Current user doesn\\'t have access to account template to execute login rules. Will skip execution.');\n        callback();\n        return;\n      }\n\n      if (error.name === UtilError.NOT_FOUND_ERROR) {\n        logger.warn(`Template ${document?.systemHeader?.templateId} not found to execute login rules. Will skip execution.`);\n        callback();\n        return;\n      }\n\n      callback(\"Unable to run \" + ruleName + \" due to error: \" + error.message);\n    });\n  }\n\n  doPostLoginClient(document, docContext, callback) {\n    this.doAuthRules(SharedConstants.RULESET_RELATIONSHIPS.POSTLOGIN_CLIENT_EVENT_NAME.name, document, docContext, callback);\n  }\n\n  doPreLogoutClient(document, docContext, callback) {\n    this.doAuthRules(SharedConstants.RULESET_RELATIONSHIPS.PRELOGOUT_CLIENT_EVENT_NAME.name, document, docContext, callback);\n  }\n\n  private prepareFormParameters(document, docContext) {\n    if (!docContext.formParameters) {\n      const unsavedDocumentListId = docContext.unsavedDocumentListId;\n      const hierarchyInfo = this.unsavedDocumentService.getHierarchyInfo(unsavedDocumentListId, document.documentId);\n\n      docContext.formParameters = {\n        hierarchyInfo,\n        unsavedDocumentListId,\n      };\n    }\n  }\n\n  onPreSaveDocument(document, docContext, callback) {\n    this.prepareFormParameters(document, docContext);\n    this.executeDocumentEvent(SharedConstants.RULESET_RELATIONSHIPS.PRESAVE_EVENT_NAME.name, document, docContext, callback);\n  }\n\n  onPreSaveOfflineDocument(document, docContext, callback) {\n    this.prepareFormParameters(document, docContext);\n    this.executeDocumentEvent(SharedConstants.RULESET_RELATIONSHIPS.PRESAVE_OFFLINE_EVENT_NAME.name, document, docContext, callback);\n  }\n\n  onPostSaveClientDocument(document, docContext, callback) {\n    this.prepareFormParameters(document, docContext);\n    this.executeDocumentEvent(SharedConstants.RULESET_RELATIONSHIPS.POSTSAVE_CLIENT_EVENT_NAME.name, document, docContext, callback);\n  }\n\n  onReceiveDocument = function (document, docContext, callback) {\n    this.executeDocumentEvent(SharedConstants.RULESET_RELATIONSHIPS.ON_RECEIVE_EVENT_NAME.name, document, docContext, callback);\n  }\n\n  broadcastValidationEvent() {\n    this.broadcastEvent(SharedConstants.EVENT_VALIDATION_VALUES_NAME, this.validationCtrlValues);\n  }\n\n  broadcastEvent(eventName, eventValue?) {\n    this.broadcastService.broadcast(eventName, eventValue);\n  }\n\n  dispatchStoreAction(action) {\n    this.appStore.dispatch(action);\n  }\n\n  getTemplateFromStore(templateId) {\n    return cloneDeep(this.appStore.getState().formState.templates[templateId]);\n  }\n\n  getDocumentFromStore(documentId) {\n    return cloneDeep(this.appStore.getState().formState.documents[documentId]);\n  }\n\n  /***---------------------- Helper functions -----------------***/\n  private initFieldValidator(document, template, tplField, fieldName, fieldValue) {\n\n    this.initValidationValue(document, template, fieldName);\n\n    if (tplField.mandatory === true) {\n      this.setValidationValue(document, fieldName, 'required', !UtilValidation.hasValue(fieldValue));\n    }\n\n    if (tplField.minLength) {\n      this.setValidationValue(document, fieldName, 'hasMinLength',\n        !UtilValidation.validateMinLength(fieldValue, tplField.minLength));\n    }\n\n    if (tplField.maxLength) {\n      this.setValidationValue(document, fieldName, 'hasMaxLength',\n        !UtilValidation.validateMaxLength(fieldValue, tplField.maxLength));\n    }\n  }\n\n  async executeRuleSet(eventName, processDoc, documentContext, eventRule) {\n\n    const _self = this;\n\n    return new Promise((resolve, reject) =>\n    {\n\n      documentContext.eventName = eventName;\n\n      const ruleContext = new RuleContext(_self, eventName, processDoc, documentContext);\n\n      _self.ruleEngineService.processRuleFlow(processDoc, documentContext, eventRule, ruleContext, function (result) {\n\n        const msg = result ? result.message : null;\n        const status = result ? result.status : SharedConstants.STATUS_SUCCESS;\n        if (msg) {\n          _self.notificationService.printMessage(msg, status, null, 'toast-top-right', false);\n        }\n\n        if (status && status.toLowerCase() === SharedConstants.STATUS_ERROR) {\n\n          reject(result);\n\n        } else {\n\n          switch (eventName) {\n\n            case SharedConstants.RULESET_RELATIONSHIPS.ONLOAD_EVENT_NAME.name:\n              _self.broadcastEvent(SharedConstants.ONLOAD_DONE_RULES_EVENT_NAME, true);\n              break;\n\n          }\n\n          // _self.updateDocumentToStore(prevDocument, processDoc, documentContext);\n\n          resolve(result);\n        }\n      });\n\n    });\n\n  }\n\n  private shouldRunRules(rulesData: RulesData) {\n\n    const _self = this;\n    const eventName = rulesData.eventName;\n\n    const documentContext = rulesData.documentContext;\n    if (SharedConstants.RULESET_RELATIONSHIPS.ON_FIELD_CHANGE_EVENT_NAME.name === eventName && !this.isExistsChangedFieldInRulesetTriggeredOn(eventName, documentContext)) {\n      return false;\n    }\n\n    // bypass loadedDocument check\n    if (rulesData.shouldRun) {\n      return true;\n    }\n\n    const document = rulesData.document;\n    const loadedDocument = _self.documentService.getLoadedDocument(document.documentId);\n    if (!loadedDocument) {\n\n      const msg = `%cDocument: ${document.documentId} has been unloaded on form. Terminate processing ${eventName} rules.`;\n      logger.info(msg, `color:green`);\n\n      return false;\n    }\n\n    return true;\n  }\n\n  executeDocumentEventPromise(rulesData: RulesData) {\n    const _self = this;\n\n    const eventName = rulesData.eventName;\n    let document = rulesData.document ? rulesData.document : {};\n    const documentContext = rulesData.documentContext;\n    const changedField = documentContext.fieldChanged;\n    const newValue = documentContext.newValue;\n    const template = documentContext.template;\n    const templateId = documentContext.templateId;\n\n    if (documentContext.isNew === undefined) {\n      const unsavedDocumentListId = documentContext.unsavedDocumentListId ? documentContext.unsavedDocumentListId : documentContext.formParameters?.unsavedDocumentListId;\n      if (document?.systemHeader?.createdDate) {\n        documentContext.isNew = false;\n      } else if (unsavedDocumentListId) {\n        const documentInfoItem = _self.unsavedDocumentService.getDocumentInfoItem(unsavedDocumentListId, document?.documentId);\n        documentContext.isNew = documentInfoItem?.isNew === true;\n      } else if (documentContext.documentData) {\n        documentContext.isNew = documentContext.documentData.isNew;\n      }\n    }\n\n    const changedFieldMsg = ` - changed field: ${changedField} - old value: ${documentContext.oldValue} - new value: ${newValue}`;\n    const msg = `%cChecking for and processing ${eventName} rules for document: ${document?.documentId} ${changedField ? changedFieldMsg : ''}`;\n    logger.info(msg, `color:green`);\n\n    return new Promise((resolve) => {\n\n      if (_self.shouldRunRules(rulesData) === false) {\n        resolve(rulesData);\n        return;\n      }\n\n      this.appStore.dispatch(formSetRulesStatus(templateId, ClientConstants.RULES_STATUS_STARTED));\n\n      _self.loadRule(eventName, template).then(\n        function successFunc(rulesets: []) {\n          rulesData.rulesetCount = rulesets.length;\n\n          if (!rulesets.length) {\n            resolve(rulesData);\n            return;\n          }\n\n          function processEvent(user, accountControl) {\n\n            documentContext.user = user ? user : {};\n            documentContext.accountControl = accountControl;\n\n            _self.unsavedDocumentService.setParentInfo(documentContext);\n            _self.unsavedDocumentService.setChildInfo(documentContext);\n\n            function asyncJob(ruleset) {\n              if (ruleset) {\n\n                const state = _self.appStore.getState().formState;\n                document = state.documents[document?.documentId] ? state.documents[document?.documentId] : document;\n\n                return _self.executeRuleSet(eventName, document, documentContext, ruleset);\n\n              }\n            }\n\n            UtilSequenceProcess.processList(rulesets, asyncJob).then(\n              function allPromiseSuccessFunc(results) {\n\n                rulesData.results = results;\n                resolve(rulesData);\n\n              },\n              function errorFunc(err) {\n\n                rulesData.error = err;\n                resolve(rulesData);\n\n                if (eventName === SharedConstants.RULESET_RELATIONSHIPS.PRESAVE_EVENT_NAME.name) {\n\n                  _self.broadcastEvent(ClientConstants.PRESAVE_DOCUMENT_FORM_RESET, {\n                    document: document,\n                    unsavedDocumentListId: documentContext.unsavedDocumentListId\n                  });\n                }\n\n              }\n            );\n          }\n\n          processEvent(_self.user.account, _self.user.accountControlDocument);\n        },\n        function errorFunc(err) {\n\n          logger.error('Load rule error: ' + err);\n          rulesData.error = err;\n          resolve(rulesData);\n\n        }\n      );\n    });\n\n  }\n\n  executeDocumentEvent(eventName, document, documentContext, callback) {\n\n    documentContext.isChildDoc = !!documentContext.formParameters?.hierarchyInfo?.parentDocumentId;\n\n    const rulesData: RulesData = {\n      eventName,\n      document,\n      documentContext,\n      callback\n    };\n\n    this.queue.next(rulesData);\n  }\n\n  private setParentTplDoc(documentContext, document) {\n\n    let unsavedDocumentListId = documentContext.formParameters.unsavedDocumentListId;\n    if (!unsavedDocumentListId) {\n      unsavedDocumentListId = documentContext.unsavedDocumentListId;\n    }\n    const result = this.unsavedDocumentService.getParentData(unsavedDocumentListId, document.documentId);\n    documentContext.parentDocument = result.parentDoc;\n    documentContext.parentTemplate = result.parentTpl;\n  }\n\n  private setChildTplDoc(documentContext, document) {\n\n    let unsavedDocumentListId = documentContext.formParameters.unsavedDocumentListId;\n    if (!unsavedDocumentListId) {\n      unsavedDocumentListId = documentContext.unsavedDocumentListId;\n    }\n    const result = this.unsavedDocumentService.getChildData(unsavedDocumentListId, document.documentId);\n\n    documentContext.childDocument = result.childDoc;\n    documentContext.childTemplate = result.childTpl;\n  }\n\n  private loadRulesetById(docId, ruleName) {\n\n    const _self = this;\n\n    return new Promise((resolve, reject) => {\n\n      _self.documentService.getDocumentOnly(docId).then(\n        function successFunc(doc) {\n\n          resolve({\n            rulesetId: docId,\n            ruleSetDSL: doc.ruleSetDSL\n          });\n\n        },\n        function errorFunc(err) {\n\n          let msg = ruleName + ' ruleset: ' + docId + ' not found due to error: ';\n          msg += err && err.message ? err.message : err;\n\n          if (ruleName === SharedConstants.RULESET_RELATIONSHIPS.ONLOAD_EVENT_NAME.name ||\n              ruleName === SharedConstants.RULESET_RELATIONSHIPS.PRESAVE_EVENT_NAME.name) {\n\n            reject(new Error(msg));\n\n          } else {\n\n            _self.notificationService.printMessage(msg, SharedConstants.STATUS_WARNING, null, { x: 'right', y: 'top' });\n\n            // do not break the chain in order to load the next ruleset document\n            resolve(true);\n          }\n\n        }\n      );\n\n    });\n\n  }\n\n  private loadRule(ruleName, template) {\n\n    const _self = this;\n\n    return new Promise((resolve, reject) => {\n\n      if (template) {\n\n        const relName = UtilRules.getRelatedName(ruleName);\n\n        const rulesetRelValues = template[relName];\n        if (rulesetRelValues) {\n\n          logger.info('Using number of related rulesets: ' + rulesetRelValues.length);\n\n          const promises = [];\n\n          rulesetRelValues.forEach(function (obj) {\n            promises.push(_self.loadRulesetById(obj.documentId, ruleName));\n          });\n\n          Promise.all(promises).then(\n            function successFunc(ruleFlows) {\n\n              logger.info('Found related rulesets: ' + ruleFlows.length);\n\n              resolve(ruleFlows);\n\n            },\n            function errorFunc(err) {\n\n              logger.warn('Not found related rulesets.');\n\n              reject(err);\n\n            }\n          );\n\n        } else {\n\n          const rules = template.rules;\n          const foundRuleset = [];\n\n          if (rules && rules.length) {\n\n            for (let rId = 0; rId < rules.length; rId++) {\n\n              if (rules[rId].name === ruleName) {\n                logger.warn('DEPRECATED: please use the ruleset related document structure ' +\n                  'in the rules definition instead of having the ruleFlow script directly ' +\n                  'in template: ' + template.documentId);\n\n                foundRuleset.push(rules[rId].ruleFlow);\n\n              }\n\n            }\n          }\n\n          resolve(foundRuleset);\n        }\n      } else {\n        reject(\"No template provided for loadRule.\");\n      }\n\n    });\n  }\n\n  initValidationValue(document, template, field) {\n\n    const affectedDocId = document.documentId;\n\n    if (!this.validationCtrlValues[affectedDocId]) {\n\n      this.validationCtrlValues[affectedDocId] = {\n        templateId: template.documentId\n      };\n\n    }\n\n    if (!this.validationCtrlValues[affectedDocId][field]) {\n\n      this.validationCtrlValues[affectedDocId][field] = {};\n\n    }\n  }\n\n  private setValidationValue(affectedDoc, field, name, flag) {\n\n    if (flag !== undefined) {\n\n      // use string values of \"yes\" and \"true\" so that they can be used inside the rules.\n      const result = (flag === 'yes' || flag === 'true' || flag === true);\n\n      if (this.validationCtrlValues[affectedDoc.documentId] &&\n        this.validationCtrlValues[affectedDoc.documentId][field]) {\n\n        if (this.validationCtrlValues[affectedDoc.documentId][field][name] !== result) {\n          this.validationCtrlValues[affectedDoc.documentId][field][name] = result;\n\n          this.validateFormFields({\n            documentId: affectedDoc.documentId,\n            fieldName: field,\n            validateName: name\n          });\n        }\n\n      }\n    }\n  }\n\n  private isExistsChangedFieldInRulesetTriggeredOn(eventName, documentContext) {\n    let isChangedFieldFound = false;\n    if (SharedConstants.RULESET_RELATIONSHIPS.ON_FIELD_CHANGE_EVENT_NAME.name === eventName) {\n      const rulesetRelValues = documentContext.template[SharedConstants.RULESET_RELATIONSHIPS.ON_FIELD_CHANGE_EVENT_NAME.relName]\n      if (rulesetRelValues && rulesetRelValues.length > 0) {\n        for (let i = 0; i < rulesetRelValues.length; i++) {\n          const ruleObj = rulesetRelValues[i];\n          isChangedFieldFound = !ruleObj.triggeredOn || includes(ruleObj.triggeredOn, documentContext.fieldChanged);\n          if (isChangedFieldFound) {\n            break;\n          }\n        }\n      }\n    }\n    return isChangedFieldFound;\n  }\n\n  /***------------------- End Rule context -------------------****/\n\n  validateFormFields = (value?: any) => {\n\n    this.broadcastEvent(ClientConstants.VALIDATE_FORM_FIELDS, value);\n\n  }\n}\n","import { ClientConstants } from './../../constants/ClientConstants';\nimport { Injectable, inject } from '@angular/core';\nimport { ChangeSourceType, DocumentChangedInfo, DocumentInfo, FormComponent, StateChangeInfo } from '@formbird/types';\nimport { Action } from 'redux';\nimport { Observable, merge } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\nimport { formDocumentChanged, formResetDocumentChanged, formSetDocument, formSetDocumentInfo, formSetOrgDocument, formUpdateComponentDefinition, formUpdateInitDocumentData, formSetComponentFlagTemplate, formDocumentLoaded } from '../../redux/actions';\nimport { select } from '../../redux/decorators/select';\nimport { IApplicationState } from '../../redux/state/application.state';\nimport { AppStore } from '../../redux/store/app.store';\nimport { ValidationService } from '../validation/validation.service';\nimport { LatestDocumentService } from './latest-document.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ChangedDocumentService {\n  private appStore = inject<AppStore<IApplicationState>>(AppStore);\n  private validationService = inject(ValidationService);\n\n\n  @select(['formState', 'resetDocument']) resetDocument$: Observable<any>;\n\n  @select(['formState', 'documents']) documents$: Observable<any>;\n\n  @select(['formState', 'recordedStateChanges']) recordedStateChanges$: Observable<any>;\n\n  @select(['formState', 'recordedComponentTemplateChanges']) recordedComponentTemplateChanges$: Observable<any>;\n\n  @select(['formState', 'rulesProcessingData']) rulesProcessingData$: Observable<any>;\n\n  private latestDocumentService: LatestDocumentService;\n\n  constructor() {\n    this.latestDocumentService = LatestDocumentService.getInstance();\n  }\n\n  dispatchAction(action: Action) {\n    this.appStore.dispatch(action);\n  }\n\n  /**\n   * Provide the change information for the specified document field that the component binds to\n   * @param component the component binds to the field\n   * @param newValue the changed/new value\n   * @param controlName the registered control manages the field value\n   * @param options the options\n   */\n  valueChanged(component: FormComponent, newValue: any, controlName?: string, options?: any) {\n\n    const fieldName = component?.fieldName;\n    if (!fieldName) {\n      const msg = `Name not specified in component definition of component ${component?.componentDefinition?.componentName} for value: ${JSON.stringify(newValue)}. Please ensure the components entry has a name in the component definition.`;\n      console.error(msg);\n      throw new Error(msg);\n    }\n\n    const documentChangedInfo: DocumentChangedInfo = {\n      documentId: component.document.documentId,\n      fieldName: fieldName,\n      newValue: newValue,\n      formParameters: component.formParameters,\n      // default source value change is made from the component\n      sourceType: options?.sourceType ? options?.sourceType : ChangeSourceType.COMPONENT,\n      controlName: controlName\n    };\n\n    this.appStore.dispatch(formDocumentChanged(documentChangedInfo));\n  }\n\n  /**\n   * A new way to notify changed value the same as @function valueChanged that provide the change information for the specified document field that the component binds to\n   * @param documentId the document Id\n   * @param changedFieldName the changed field name\n   * @param newValue the changed/new value\n   * @param formParameters form information\n   * @param controlName the registered control manages the field value\n   * @param options the options\n   */\n  notifyValueChanged(documentId, changedFieldName, newValue, formParameters, controlName?, options?) {\n    const documentChangedInfo: DocumentChangedInfo = {\n      documentId,\n      fieldName: changedFieldName,\n      newValue,\n      formParameters,\n      // default source value change is made from the component\n      sourceType: options?.sourceType ? options?.sourceType : ChangeSourceType.COMPONENT,\n      controlName: controlName\n    };\n    this.appStore.dispatch(formDocumentChanged(documentChangedInfo));\n  }\n\n  /**\n     * \n     * @param a documentChangedInfo \n     */\n  executeOnFieldChangeHasNoChanges(documentChangedInfo: DocumentChangedInfo) {\n    this.validationService.executeOnFieldChangeWithNoChanges(documentChangedInfo);\n  }\n\n  /**\n   * @deprecated due to https://mantis.formbird.com/view.php?id=20113#c92502\n   * @param component \n   */\n  executeOnFieldChangeWithNoChanges(component: FormComponent) {\n    const documentChangedInfo: DocumentChangedInfo = {\n      documentId: component.document.documentId,\n      fieldName: component.fieldName,\n      newValue: component.fieldValue,\n      formParameters: component.formParameters,\n      // default source value change is made from the component\n      sourceType: ChangeSourceType.COMPONENT,\n      shouldCompareValues: false\n    };\n    this.validationService.executeOnFieldChangeWithNoChanges(documentChangedInfo);\n  }\n\n  resetChangeDocument() {\n    this.appStore.dispatch(formResetDocumentChanged());\n  }\n\n  notifyIntializedField(component: FormComponent, shouldDispatchEmptyFieldValue?: boolean) {\n    // const fieldName = component?.fieldName;\n    // if (!fieldName) {\n    //   return;\n    // }\n    // const unsavedDocumentListId = component?.formParameters?.unsavedDocumentListId;\n    // const documentId = component?.document?.documentId;\n    // const fieldValue = shouldDispatchEmptyFieldValue !== false ? component?.fieldValue : undefined;\n    // this.appStore.dispatch(formUpdateInitDocumentData(unsavedDocumentListId, documentId, fieldName, fieldValue));\n  }\n\n  private isChangedFromTheSameSource(stateChanges: StateChangeInfo, fieldName: string, documentId, controlName?: string) {\n    const changedSourceInfo = stateChanges?.changedSourceInfo;\n    return changedSourceInfo\n      && changedSourceInfo.type === ChangeSourceType.COMPONENT\n      && changedSourceInfo.fieldName === fieldName\n      && changedSourceInfo.documentId === documentId\n      && changedSourceInfo.controlName === controlName;\n  }\n\n  /**\n   * Listen value changes on a specified document field\n   * @param fieldName the field name of document\n   * @param documentId the document id\n   * @param controlName the registered control that holds the field value in this component. It is used to check on the source of change\n   * to avoid applying changes itself and also applying the value from the components that share the field name.\n   * @param options provides more information for the watch.\n   */\n  watch(fieldName, documentId, controlName?: string, options?: any) {\n    return this.recordedStateChanges$.pipe(\n      filter((stateChanges: StateChangeInfo) => {\n        const docExists = this.appStore.getState().formState.documents[documentId] && stateChanges?.changedSourceInfo?.documentId === documentId;\n        const con1 = stateChanges?.changedSourceInfo?.resetDocument;\n        const con2 = fieldName === stateChanges?.changedSourceInfo.fieldName\n          && (!this.isChangedFromTheSameSource(stateChanges, fieldName, documentId) || options?.forceWatch);\n        return docExists && (con1 || con2);\n      }),\n      map((stateChanges: StateChangeInfo) => {      \n        return this.appStore.getState().formState.documents[documentId][fieldName];\n      })\n    );\n  }\n\n  watchComponentTemplate(templateId) {\n\n    return this.rulesProcessingData$.pipe(\n      filter((rulesProcessingData) => {\n        return this.appStore.getState().formState.templates[templateId] &&\n          rulesProcessingData[templateId] && rulesProcessingData[templateId].status === ClientConstants.RULES_STATUS_DONE;\n      }),\n      map((rulesProcessingData) => {\n        return this.appStore.getState().formState.templates[templateId].components;\n      })\n    );\n  }\n\n  watchComponentDef(fieldName, templateId, componentName?) {\n    return this.recordedComponentTemplateChanges$.pipe(\n      filter((componentDefChanges: any) => {\n        const hasChangedFieldName = componentDefChanges[templateId] && componentDefChanges[templateId][fieldName];\n        return !!componentName ? componentDefChanges[templateId][fieldName].componentName === componentName : hasChangedFieldName;\n      }),\n      map((componentDefChanges: any) => {\n        const components = this.appStore.getState().formState.templates[templateId].components;\n        for (let i = 0; i < components.length; i++) {\n          if (components[i].name === fieldName && (!componentName || componentName === components[i].componentName)) {\n            return components[i];\n          }\n        }\n      })\n    );\n  }\n\n  watchDocument(documentId) {\n    return this.recordedStateChanges$.pipe(\n      filter((stateChanges: StateChangeInfo) => {\n        return this.appStore.getState().formState.documents[documentId] &&\n          stateChanges?.changedSourceInfo.documentId === documentId;\n      }),\n      map((stateChanges: StateChangeInfo) => {\n        const document = this.appStore.getState().formState.documents[documentId];\n        if (document?.documentId) {\n          this.latestDocumentService.latestDocuments[document.documentId] = document;\n        }\n\n        return document;\n      })\n    );\n\n  }\n\n  watchStoreChanges() {\n    return this.recordedStateChanges$;\n  }\n\n  watchComponentStateChanges(templateId) {\n    return this.rulesProcessingData$.pipe(\n      filter((rulesProcessingData) => {\n        return rulesProcessingData[templateId] && rulesProcessingData[templateId].status === ClientConstants.RULES_STATUS_DONE;\n      }),\n      map((rulesProcessingData) => {\n        return this.appStore.getState().formState.recordedComponentTemplateChanges;\n      })\n    );\n  }\n\n  notifyDocumentChanged(documentChangedInfo: DocumentChangedInfo) {\n    this.dispatchAction(formDocumentChanged(documentChangedInfo));\n  }\n\n  notifyComponentDefinitionUpdated(templateId, fieldName, key, componentDefinition) {\n    this.dispatchAction(formUpdateComponentDefinition(templateId, fieldName, key, componentDefinition));\n  }\n\n  setOrgDocument(document) {\n    this.dispatchAction(formSetOrgDocument(document));\n  }\n\n  setDocumentInfo(unsavedDocumentListId, docInfo: DocumentInfo) {\n    this.dispatchAction(formSetDocumentInfo(unsavedDocumentListId, docInfo));\n  }\n\n  setDocument(document) {\n    this.dispatchAction(formSetDocument(document));\n  }\n\n  setComponentFlagTemplate(templateId, fieldName, flagName, flagValue) {\n    this.dispatchAction(formSetComponentFlagTemplate(templateId, fieldName, flagName, flagValue));\n  }\n\n  documentLoaded(documentId, unsavedDocumentListId, isLoaded) {\n    this.dispatchAction(formDocumentLoaded(documentId, unsavedDocumentListId, isLoaded));\n  }\n\n  isLoadedDocument(documentId, unsavedDocumentListId) {\n    const docInfo = this.appStore.getState().formState?.documentInfo[unsavedDocumentListId];\n    return docInfo && docInfo[documentId] && docInfo[documentId].loaded;\n  }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { UtilSystemHeader } from '@formbird/shared';\nimport { DocumentService } from './document.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ClientSystemHeaderService {\n  private documentService = inject(DocumentService);\n\n\n  private getTemplate(templateId) {\n    return this.documentService.getDocumentOnly(templateId);\n  }\n\n  updateSystemHeader(bean, template, originalBean) {\n\n    const _self = this;\n\n    return new Promise((resolve, reject) => {\n\n      if (originalBean && originalBean.systemHeader) {\n\n        if (!template) {\n\n          if (!originalBean.systemHeader.templateId) {\n            // no template to write system header with, so don't write the summary values\n            resolve(bean);\n\n          } else {\n\n            _self.getTemplate(originalBean.systemHeader.templateId).then(\n\n              function successFunc(template) {\n                UtilSystemHeader.writeSystemHeaderSummary(bean, template, originalBean);\n                resolve(bean);\n              },\n\n              function errorFunc(err) {\n                resolve(bean);\n              }\n            );\n          }\n\n        } else {\n\n          UtilSystemHeader.writeSystemHeaderSummary(bean, template, originalBean);\n          resolve(bean);\n\n        }\n      } else {\n        resolve(bean);\n      }\n    });\n\n  }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { DocumentInfo } from '@formbird/types';\nimport { formResetDocumentInfo, formSetDocumentInfo, formSetupDocumentList } from '../../redux/actions';\nimport { IApplicationState } from '../../redux/state/application.state';\nimport { AppStore } from '../../redux/store/app.store';\nimport { DocumentService } from './document.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class CurrentChildDocumentService {\n  private appStore = inject<AppStore<IApplicationState>>(AppStore);\n  private documentService = inject(DocumentService);\n\n  // setTemplate(unsavedDocumentListId, template) {\n\n  //   this.documentService.setLoadedDocumentOnly(template);\n\n  //   const docInfo: DocumentInfo = {\n  //     templateId: template.documentId\n  //   };\n\n  //   this.appStore.dispatch(formSetDocumentInfo(unsavedDocumentListId, docInfo));\n  // }\n\n  // setDocument(unsavedDocumentListId, document) {\n\n  //   this.documentService.setLoadedDocumentOnly(document);\n\n  //   const docInfo: DocumentInfo = {\n  //     documentId: document.documentId\n  //   };\n\n  //   this.appStore.dispatch(formSetDocumentInfo(unsavedDocumentListId, docInfo));\n  // }\n\n  // setDocumentData(unsavedDocumentListId, documentData) {\n  //   this.documentService.setLoadedDocumentOnly(documentData.document);\n  //   this.documentService.setLoadedDocumentOnly(documentData.template);\n\n  //   const docInfo: DocumentInfo = {\n  //     documentId: documentData.document.documentId,\n  //     templateId: documentData.template.documentId\n  //   };\n  //   this.appStore.dispatch(formSetDocumentInfo(unsavedDocumentListId, docInfo));\n  // }\n\n  // resetDocumentData(unsavedDocumentList) {\n  //   this.appStore.dispatch(formResetDocumentInfo(unsavedDocumentList));\n  // }\n\n  // setupDocumentData(unsavedDocumentListId) {\n  //   this.appStore.dispatch(formSetupDocumentList(false, unsavedDocumentListId));\n  // }\n\n}\n","import { IndexedDBService } from '../indexeddb/indexed-db.service';\nimport { Injectable, inject } from '@angular/core';\nimport { DocumentUpdater, SystemHeaderFilter, UtilDocument, UtilHttpStatus, UtilString } from '@formbird/shared';\nimport { ChangeSourceType, DocumentChangedInfo, FormParameters, SharedConstants } from '@formbird/types';\nimport { isEqual } from 'lodash';\nimport { cloneDeep } from 'es-toolkit';\nimport { formSetDocument } from '../../redux/actions';\nimport { IApplicationState } from '../../redux/state/application.state';\nimport { AppStore } from '../../redux/store/app.store';\nimport { BroadcastService } from '../broadcast/broadcast.service';\nimport { ConfigService } from '../config/config.service';\nimport { ValidationService } from '../validation/validation.service';\nimport { DocumentService } from './document.service';\nimport { ModifiedFieldService } from './modified-field.service';\nimport { UnsavedDocumentService } from './unsaved-document.service';\nimport { ClientConstants } from '../../constants/ClientConstants';\nimport { DataService } from '../data/data.service';\nimport { OfflineStatusService } from '../offline-status/offline-status.service';\nimport { LoggedInUserService } from '../user/logged-in-user.service';\n\nconst logger = console;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DocumentUpdateService {\n  private dataService = inject(DataService);\n  private documentService = inject(DocumentService);\n  private modifiedFieldService = inject(ModifiedFieldService);\n  private unsavedDocumentService = inject(UnsavedDocumentService);\n  private broadcastService = inject(BroadcastService);\n  private configService = inject(ConfigService);\n  private validationService = inject(ValidationService);\n  private appStore = inject<AppStore<IApplicationState>>(AppStore);\n  private offlineStatusService = inject(OfflineStatusService);\n  private indexedDBService = inject(IndexedDBService);\n  private loggedInUserService = inject(LoggedInUserService);\n\n\n  private updatePrevCurrentVersion(currentVersion) {\n\n    const _self = this;\n\n    // in case the provided version is current one so set currentVersion of the previous one to false\n    // This case for updating document from pulling documents on reconnection\n\n    const documentId = currentVersion.documentId;\n    const loadedDocs = _self.unsavedDocumentService.getAllLoadedDocs();\n    const orgDocs = _self.documentService.getOrgDocuments();\n    const keys = Object.keys(orgDocs);\n\n    for (let i = 0; i < keys.length; i++) {\n\n      const versionId = keys[i];\n      let orgDoc = orgDocs[versionId];\n\n      if (documentId === orgDoc.documentId &&\n        versionId !== documentId &&\n        versionId !== currentVersion.systemHeader.versionId &&\n        orgDoc.systemHeader.currentVersion\n      ) {\n\n        orgDoc = cloneDeep(orgDoc);\n        orgDoc.systemHeader.currentVersion = false;\n        _self.documentService.setOriginalDocumentOnly(orgDoc, orgDoc.systemHeader.versionId);\n\n        loadedDocs.forEach(function(loadedDoc) {\n\n          if (loadedDoc.systemHeader.versionId === orgDoc.systemHeader.versionId) {\n            loadedDoc.systemHeader.currentVersion = false;\n            _self.documentService.setLoadedDocumentOnly(cloneDeep(loadedDoc), orgDoc.systemHeader.versionId);\n          }\n        });\n\n        return;\n      }\n    }\n  }\n\n  private executeOnFieldChangeOnPush(oldDocument, newDocument, changedFields) {\n\n    if (!changedFields?.length || !oldDocument) {\n      return;\n    }\n\n    const defaultExecuteOnFieldChangeOnPush = this.configService.clientConfig().defaultExecuteOnFieldChangeOnPush === true;\n    const documentId = oldDocument.documentId;\n    const documentListIdInfos = this.unsavedDocumentService.getDocumentListInfos(documentId);\n\n    documentListIdInfos.forEach(documentListIdInfo => {\n\n      const template = documentListIdInfo.template;\n      const executeOnFieldChangeOnPush = template.executeOnFieldChangeOnPush === true;\n\n      //check if the template has been enabled to execute OnFieldChange on push\n      if (defaultExecuteOnFieldChangeOnPush || executeOnFieldChangeOnPush) {\n\n        const formParameters: FormParameters = {\n          unsavedDocumentListId: documentListIdInfo.documentListId,\n          selectedDocumentId: documentId\n        };\n\n        changedFields.forEach(changedField => {\n\n          const component = template?.components?.filter(comp => comp?.name === changedField)[0];\n          if (component) {\n\n            const fieldName = component.name;\n            if (fieldName) {\n\n              const documentChangedInfo: DocumentChangedInfo = {\n                documentId: documentId,\n                fieldName: fieldName,\n                oldValue: oldDocument[fieldName],\n                newValue: newDocument[fieldName],\n                formParameters: formParameters,\n                sourceType: ChangeSourceType.DOCUMENT_PUSH,\n                sourceEvent: ChangeSourceType.DOCUMENT_PUSH,\n                shouldCompareValues: false\n              };\n\n              this.validationService.executeOnFieldChangeWithNoChanges(documentChangedInfo);\n            }\n          }\n\n        });\n      }\n\n    });\n\n\n  }\n\n  private extractChangedFields(updates) {\n\n    const res = [];\n\n    updates.forEach(update => {\n      const fieldName = update.path.split('/')[1];\n      if (fieldName !== 'systemHeader') {\n        res.push(fieldName);\n      }\n    });\n\n    return res;\n\n  }\n\n  async updateVersions(versions) {\n\n    const _self = this;\n\n    if (versions && versions.length) {\n\n      const currentVersion = versions.filter(version => version.systemHeader.currentVersion)[0];\n      if (currentVersion) {\n\n        const documentId = currentVersion.documentId;\n\n        const loggedUserId = this.loggedInUserService.getUserId();\n        if (documentId === loggedUserId) {\n          await this.loggedInUserService.setUser(currentVersion);\n          logger.info('User updated in memory: ' + documentId);\n        }\n\n        this.documentService.resetDisableSaveFieldToDoc(currentVersion);\n\n        if (versions.length === 1) {\n          _self.updatePrevCurrentVersion(currentVersion);\n        }\n\n        logger.info('Updating document in memory: ' + documentId);\n\n        const loadedDoc = _self.documentService.getLoadedDocument(documentId);\n        let isApplyChange =  true;\n        if (_self.offlineStatusService.isCachingEnabled()) {\n          const offlineCurrentVersion = await _self.dataService.getDocumentOfflineMode(documentId);\n          const offlineVersionId = offlineCurrentVersion?.systemHeader?.versionId;\n          const loadedDocVersionId = loadedDoc?.systemHeader?.versionId;\n          const serverVersionId = currentVersion?.systemHeader?.versionId;\n\n          \n          const loadedDate = new Date(loadedDoc?.systemHeader?.createdDate || 0);\n          const currentDate = new Date(currentVersion?.systemHeader?.createdDate || 0);\n\n\n          isApplyChange = (offlineVersionId === loadedDocVersionId && loadedDocVersionId === serverVersionId) || \n              (currentDate > loadedDate) ;\n        }\n\n        if (loadedDoc?.systemHeader?.currentVersion && isApplyChange) {\n          // use current version to update loaded document on form\n          const changedFields = await _self.applyDocumentChanges(loadedDoc, currentVersion);\n\n          // execute OnFieldChange on all the configured fields have been updated from pushed document\n          this.executeOnFieldChangeOnPush(loadedDoc, currentVersion, changedFields);\n\n          // update the loaded document in store\n          _self.documentService.setLoadedDocumentOnly(loadedDoc);\n          // use current version to update org version in store\n          _self.documentService.setOriginalDocumentOnly(currentVersion);\n\n          logger.info('Update document on form to latest one.');\n\n          _self.broadcastService.broadcast(ClientConstants.DOCUMENT_UPDATED, [currentVersion]);\n        }\n      } else {\n        if (_self.offlineStatusService.isCachingEnabled()) {\n          await new Promise((res) => {\n            _self.indexedDBService.getUnprocessedDocs(async function (unprocessedDocs) {\n              const docs = unprocessedDocs.filter(doc => doc.documentId === versions[0].documentId);\n              if (docs && docs.length === 0) {\n                // in this case: all versions have been synched to server and there has no current version\n                // --> show document deleted on form\n                _self.broadcastService.broadcast(ClientConstants.DOCUMENT_DELETED, versions[0].documentId);\n                res(true);\n              }\n            });\n          });\n        } else {\n          _self.broadcastService.broadcast(ClientConstants.DOCUMENT_DELETED, versions[0].documentId);\n        }\n\n      }\n\n      const nonCurrentVersions = versions.filter(version => version.systemHeader.currentVersion === false);\n      if (nonCurrentVersions.length) {\n\n        // user non current version to update loaded non-current version in store\n        nonCurrentVersions.forEach(async function(version) {\n\n          const versionId = version.systemHeader.versionId;\n          const loadedVersion = _self.documentService.getLoadedDocument(versionId);\n\n          if (loadedVersion) {\n            await _self.applyDocumentChanges(loadedVersion, version);\n\n            // update loaded non-current version on form\n            _self.documentService.setLoadedDocumentOnly(cloneDeep(loadedVersion), versionId);\n            // use non-current version to update its version in store\n            _self.documentService.setOriginalDocumentOnly(version, versionId);\n          }\n\n        });\n      }\n\n    }\n  }\n\n  async applyDocumentChanges(oldOrgDoc, latestDoc, applyAllChanges?) {\n\n    let changedFields = [];\n\n    const documentId = latestDoc.documentId;\n    logger.info('Applying document changes for doc: ' + documentId);\n\n    const modifiedFields = this.modifiedFieldService.getModifiedFieldsInDoc(documentId);\n\n    var excludedOptions = {};\n    excludedOptions[SharedConstants.MAKE_CURRENT_VERSION_KEY] = true;\n    const loadedDocs = this.unsavedDocumentService.getAllLoadedDocs(excludedOptions);\n\n    for (let i = 0; i < loadedDocs.length; i++) {\n\n      const loadedDoc = cloneDeep(loadedDocs[i]);\n\n      if (loadedDoc.documentId === documentId) {\n\n        const updates = await DocumentUpdater.getUpdates(oldOrgDoc, latestDoc);\n\n        if (updates.updates && updates.updates.length) {\n\n          if (modifiedFields && modifiedFields.length) {\n\n            modifiedFields.forEach(function(modifiedField) {\n\n              modifiedField = UtilString.convertToObjectPath(modifiedField, '/');\n\n              updates.updates.forEach(function(update: any, index) {\n\n                const path = UtilString.convertToObjectPath(update.path, '/');\n\n                if (modifiedField === path && !isEqual(loadedDoc[modifiedField], latestDoc[modifiedField])) {\n\n                  logger.warn('Field in pushed document: \\'' +\n                    modifiedField + '\\' has been changed to: ' + JSON.stringify(update.value));\n\n                  delete updates.updates[index];\n\n                }\n\n              });\n\n            });\n\n          }\n\n          changedFields = this.extractChangedFields(updates.updates);\n\n          console.log('Updates: ', updates);\n          console.log('ChangedFields: ', changedFields);\n\n          if (changedFields?.length) {\n            await DocumentUpdater.applyUpdates(oldOrgDoc, updates);\n          }\n\n          if (applyAllChanges) {\n            SystemHeaderFilter.applyUpdatesToSystemHeader(oldOrgDoc, latestDoc);\n          }\n        }\n      }\n    }\n\n    return changedFields;\n\n  }\n\n  async updateFormDocument(unsavedDocuments, doc) {\n\n    if (unsavedDocuments.length) {\n\n      // just mutate the document if so that references to this object are not cutoff\n      // also update loaded docs too\n      for (let j = 0; j < unsavedDocuments.length; j++) {\n        const unsavedDoc = unsavedDocuments[j];\n\n        if (unsavedDoc.documentId === doc.documentId) {\n\n          const updates = await DocumentUpdater.getUpdates(unsavedDoc, doc);\n          await DocumentUpdater.applyUpdates(unsavedDoc, updates);\n          this.appStore.dispatch(formSetDocument(unsavedDoc));\n\n          break;\n        }\n      }\n\n    }\n  }\n\n  applyDocumentChangesSimple(unsavedDocument, doc) {\n    DocumentUpdater.applyUpdatesSimple(unsavedDocument, doc);\n  }\n\n  async checkDocumentsCreated() {\n\n    const _self = this;\n\n    //should not perform checking and updating if caching is enabled\n    if (this.offlineStatusService.isCachingEnabled()) {\n      return;\n    }\n\n    //load all new documents on form\n    const loadedDocuments = _self.unsavedDocumentService.getAllLoadedDocs();\n\n    //check if any documents are new but found from server\n    if (loadedDocuments && loadedDocuments.length) {\n\n      loadedDocuments.forEach(async loadedDocument => {\n\n        await this.applyDocumentCreated(loadedDocument);\n\n      });\n    }\n\n  }\n\n  async applyDocumentCreated(loadedDocument) {\n\n    const _self = this;\n\n    const documentId = loadedDocument.documentId;\n\n    const isNew = UtilDocument.isNew(loadedDocument);\n    if (!isNew) {\n      return;\n    }\n\n    //do not check and update document if the pushing data is not reset to false because of errors in the previous save request\n    if (!_self.modifiedFieldService.isPushing(documentId)) {\n      logger.debug('Do not check document created for document: ' + documentId);\n      return;\n    }\n\n    try {\n\n      const serverDoc = await _self.dataService.getDocumentFromServer(documentId);\n      if (serverDoc) {\n\n        //Found from server. Update that new document using the version from server\n\n        this.documentService.resetDisableSaveFieldToDoc(serverDoc);\n\n        logger.info('Updating document in memory: ' + documentId);\n\n        // use current version to update loaded document on form\n        await _self.applyDocumentChanges(loadedDocument, serverDoc, true);\n\n        // update the loaded document in store\n        _self.documentService.setLoadedDocumentOnly(loadedDocument);\n        // use current version to update org version in store\n        _self.documentService.setOriginalDocumentOnly(serverDoc);\n\n        logger.info('Update document on form to latest one.');\n\n        _self.broadcastService.broadcast(ClientConstants.DOCUMENT_UPDATED, [serverDoc]);\n\n      }\n\n    } catch (error) {\n      console.log(error?.status === UtilHttpStatus.NOT_FOUND ?\n        `Document ${documentId} not found from server. Ignore updating on form.` :\n        `Can not check document ${documentId} from server`\n      );\n    }\n  }\n\n}\n","import { Injectable, inject } from '@angular/core';\nimport { ModifiedFieldService } from './modified-field.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class FinaliseValueFieldService {\n  private modifiedFieldService = inject(ModifiedFieldService);\n\n\n  private finaliseValueFunctions: any = {};\n\n  private ensureTemplateExist(templateId) {\n    if (!this.finaliseValueFunctions[templateId]) {\n      this.finaliseValueFunctions[templateId] = {};\n    }\n  }\n\n  addFinaliseValueFunction(templateId, fieldName, func) {\n\n    this.ensureTemplateExist(templateId);\n\n    this.finaliseValueFunctions[templateId][fieldName] = func;\n  }\n\n  getFinaliseValueFunction(templateId, fieldName) {\n\n    this.ensureTemplateExist(templateId);\n\n    return this.finaliseValueFunctions[templateId][fieldName];\n  }\n\n  finaliseFieldValues(document, template) {\n\n    if (document && this.modifiedFieldService.hasChanged(document.documentId)) {\n\n      for (let t = 0, len = template.components.length; t < len; t++) {\n\n        const fld = template.components[t];\n\n        const finaliseFunc = this.getFinaliseValueFunction(template.documentId, fld.name);\n        if (finaliseFunc) {\n          finaliseFunc(document);\n        }\n      }\n    }\n  }\n}\n","import { isArray, isObject } from 'lodash';\n\nexport class MandatoryValueProcessor {\n\n  public static async processMandatoryValues(mandatoryValuesArray, fieldValue, label) {\n    let mandatoryValuesLabel;\n\n    // the mandatoryValuesArray can only be applied to an object\n    if (!fieldValue) {\n      return;\n    } else if (!isObject(fieldValue)) {\n      return;\n    }\n\n    // mandatoryValuesArray must be an array\n    if (!mandatoryValuesArray) {\n      return;\n    } else if (!isArray(mandatoryValuesArray)) {\n      return;\n    }\n\n    for (let i = 0; i < mandatoryValuesArray.length; i++) {\n      try {\n        const JSONPath = (<any> window).JSONPath;\n        let matches = JSONPath.JSONPath({path: mandatoryValuesArray[i].jsonPathQuery, json: fieldValue});\n\n        if (matches.length === 0) {\n          // second validation if the first one failed\n          matches = JSONPath.JSONPath({path: mandatoryValuesArray[i].jsonPathQuery, json: [fieldValue]});\n          if (matches.length === 0) {\n            if (!mandatoryValuesLabel) {\n              mandatoryValuesLabel = label;\n            }\n\n            // the mandatoryValuesLabel is output to html so use, <br> for the break\n            mandatoryValuesLabel += '<br> ➡ ' + mandatoryValuesArray[i].name;\n          }          \n        }\n      } catch (err) {\n        console.error(err);\n        return err;\n      }\n\n\n    }\n\n    return mandatoryValuesLabel;\n  }\n\n}\n","import { Injectable, inject } from '@angular/core';\nimport { UtilError } from '@formbird/shared';\nimport { isArray, isDate, isEmpty, isEqual, isError, isObject, isString } from 'lodash';\nimport { MandatoryValueProcessor } from '../../utils/MandatoryValueProcessor';\nimport { ModifiedFieldService } from './modified-field.service';\n\n@Injectable()\nexport class MandatoryFieldService {\n  private modifiedFieldService = inject(ModifiedFieldService);\n\n\n  constructor() {\n    this.checkMandatoryFields = this.checkMandatoryFields.bind(this);\n  }\n\n  public mandatoryFields = { components: [] };\n\n  /**\n   * @param fieldInput the input field\n   * @param fld field\n   * @returns the label that will be shown for mandatory fields that are missing\n   */\n  async checkMandatoryValues(fieldInput, fld, isValidationArray) {\n\n    let label = fld.label;\n    if (!fld.label || fld.label === '') {\n      label = fld.name;\n    }\n\n    if (!fieldInput && fieldInput !== 0) {\n      return label;\n\n    } else if (isArray(fieldInput) && isEqual([], fieldInput)) {\n      return label;\n\n    } else if (isObject(fieldInput) && !isDate(fieldInput)) {\n\n      if (isEqual({}, fieldInput)) {\n        return label;\n\n      } else {\n\n        const valuesArray = isValidationArray ? fld.validationsArray : fld.mandatoryValuesArray;\n        if (valuesArray) {\n\n          const mandatoryValuesLabel = await MandatoryValueProcessor.processMandatoryValues(valuesArray, fieldInput, label);\n\n          if (mandatoryValuesLabel) {\n            // there are some conditions that do not match the mandatory requirements, so do not do any further\n            // processing of the save\n            return mandatoryValuesLabel;\n          }\n        }\n      }\n    }\n\n    return null;\n  }\n\n  /**\n   * @param fieldInput the input field\n   * @param fld field\n   * @returns the label that will be shown for mandatory fields that are missing\n   */\n  checkMandatoryFields(fieldInput, fld) {\n\n    let label = fld.label;\n    if (!fld.label || fld.label === '') {\n      label = fld.name;\n    }\n\n    if (!fieldInput && fieldInput !== 0) {\n      return label;\n\n    } else if (isArray(fieldInput) && isEqual([], fieldInput)) {\n      return label;\n\n    } else if (isObject(fieldInput) && !isDate(fieldInput)) {\n\n      if (isEqual({}, fieldInput)) {\n        return label;\n\n      } else {\n\n        const mandatoryFields = fld.mandatoryFields || [];\n        if (!mandatoryFields.length) {\n          if (fld.mandatoryValues) {\n            const keys = Object.keys(fld.mandatoryValues) || [];\n            for (let i = 0; i < keys.length; i++) {\n              const key = keys[i];\n              if (fld.mandatoryValues[key]) {\n                mandatoryFields.push(key);\n              }\n            }\n          }\n        }\n\n        if (mandatoryFields && mandatoryFields.length) {\n          const keys = Object.keys(fieldInput);\n\n          for (let id = 0; id < keys.length; id++) {\n\n            const key = keys[id];\n            const obj = fieldInput[key];\n\n            if (isString(obj)) {\n\n              if (mandatoryFields) {\n\n                for (let m = 0, len = mandatoryFields.length; m < len; m++) {\n\n                  if (mandatoryFields[m] === key) {\n\n                    if (obj === undefined || obj === '') {\n                      return label + ' ➡ ' + mandatoryFields[m];\n                    }\n                  }\n                }\n\n              } else {\n\n                if (obj === undefined || obj === '') {\n                  return label;\n                }\n              }\n\n            } else if (isObject(obj)) {\n\n              if (this.checkMandatoryFields(obj, fld)) {\n                return label;\n              }\n            }\n          }\n        }\n      }\n\n    }\n\n    return null;\n  }\n\n  async isMandatoryAnswered(unsavedDocumentDatas) {\n\n    if (!unsavedDocumentDatas) {\n      return Promise.reject(new Error('Unsaved document data list not provided in mandatory field check'));\n\n    }\n    \n    const modifiedFieldService = this.modifiedFieldService;\n    const checkMandatoryValues = this.checkMandatoryValues;\n    const checkMandatoryFields = this.checkMandatoryFields;\n\n    let unansweredMandatoryFieldMsg = 'Mandatory item(s) not completed: ';\n    let hasUnansweredMandatoryFields = false;\n\n    const doCheckMandatory = async function (unsavedDocumentData) {\n\n      const bean = unsavedDocumentData.document;\n      const tpl = unsavedDocumentData.template;\n\n      if (tpl.disableSaveMandatoryCheck) {\n        return Promise.resolve();\n      }\n\n      if (modifiedFieldService.hasChanged(bean.documentId)) {\n\n        try {\n\n          for (let t = 0, len = tpl.components.length; t < len; t++) {\n\n            const fld = tpl.components[t];\n            const value = bean[fld.name];\n\n            // add the mandatory fields to a message that can be output once all mandatory fields\n            // are checked. This way all mandatory fields can be displayed in the message\n            let processMandatoryFields = null;\n            let isValidationArray = false;\n\n            if (fld.mandatoryValuesArray && fld.mandatory && !fld.disableSaveMandatoryCheck) {\n              processMandatoryFields = checkMandatoryValues;\n            } else if (fld.mandatory && !fld.disableSaveMandatoryCheck) {\n              processMandatoryFields = checkMandatoryFields;\n\n            } else if (fld.validationsArray && !isEmpty(value)) {\n\n              processMandatoryFields = checkMandatoryFields;\n              isValidationArray = true;\n            }\n\n            if (processMandatoryFields) {\n\n              const missingField = await processMandatoryFields(value, fld, isValidationArray);\n              if (isError(missingField)) {\n                return Promise.reject(missingField);\n\n              }\n              \n              if (missingField) {\n                if(window.innerWidth > 400){\n                  unansweredMandatoryFieldMsg += '<br>'\n                }\n                if (fld.mandatoryMessage) {\n                  unansweredMandatoryFieldMsg += `<span class='mandatory-item'>${fld.mandatoryMessage}</span>`;\n\n                } else {\n                  unansweredMandatoryFieldMsg += `<span class='mandatory-item'>${missingField}</span>`;\n                }\n\n                hasUnansweredMandatoryFields = true;\n              }\n            }\n          }\n\n        } catch (err) {\n\n          let msg;\n          if (err.name === UtilError.NOT_FOUND_ERROR) {\n            msg = 'Template not found';\n          } else {\n            msg = 'Error getting template to determine mandatory field: ' + err.message;\n          }\n          return Promise.reject(new Error(msg));\n        }\n\n      } else {\n\n        return Promise.resolve();\n      }\n\n    };\n\n    for (let i = 0; i < unsavedDocumentDatas.length; i++) {\n      await doCheckMandatory(unsavedDocumentDatas[i]);\n    }\n\n    if (hasUnansweredMandatoryFields) {\n      // reject with the the mandatory message so it can be output by the caller\n      return Promise.reject(new Error(unansweredMandatoryFieldMsg));\n    } else {\n      return Promise.resolve(true);\n    }\n  }\n\n}\n","import { Injectable } from '@angular/core';\n\ninterface PendingOperationOptions {\n  documentId?: string;\n  callerName?: string;\n}\n\nconst config = (<any>window).ftClientConfig;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class PendingOperationService {\n    \n  private pendingOperations: { [key: string]: PendingOperationOptions } = {};\n  private readonly documentSavePendingTimeoutMillis = config.documentSavePendingTimeoutMillis || 10000;\n\n  addPendingOperation(operationName: string, options: PendingOperationOptions): void {\n    const operationNameKey = `${operationName} ${options?.documentId ? options.documentId : ''} ${options?.callerName ? options.callerName : ''}`;\n\n    if (this.pendingOperations[operationNameKey]) {\n      throw new Error(`Pending operation '${operationNameKey}' already exists.`);\n    }\n\n    this.pendingOperations[operationNameKey] = options;\n  }\n\n  markOperationComplete(operationName: string, options: PendingOperationOptions): void {\n    const operationNameKey = `${operationName} ${options?.documentId ? options.documentId : ''} ${options?.callerName ? options.callerName : ''}`;\n\n    delete this.pendingOperations[operationNameKey];\n  }\n\n  waitForPendingOperations(): Promise<void> {\n    return new Promise<void>((resolve, reject) => {\n      const logPendingOperations = () => {\n        const pendingOperations = Object.keys(this.pendingOperations);\n        console.log(`Waiting for pending operations before save: ${pendingOperations.join(', ')}`);\n      };\n\n      const cleanup = () => {\n        clearTimeout(timeout);\n        clearInterval(interval);\n      };\n\n      const checkPendingOperations = () => {\n        logPendingOperations();\n        if (Object.keys(this.pendingOperations).length === 0) {\n          cleanup();\n          resolve();\n        }\n      };\n\n      if (Object.keys(this.pendingOperations).length === 0) {\n        resolve();\n        return;\n      }\n\n      const timeout = setTimeout(() => {\n        cleanup();\n        const unfinishedOperations = Object.keys(this.pendingOperations);\n        reject(new Error(`Pending operations have not completed in the required time before save: ${unfinishedOperations.join(', ')}`));\n      }, this.documentSavePendingTimeoutMillis);\n\n      const interval = setInterval(checkPendingOperations, 1000);\n      checkPendingOperations(); // Immediate check in case operations complete quickly\n    });\n  }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { DocumentIdValidator, UtilArray, UtilConflict, UtilDocument, UtilHttpStatus, UtilType } from '@formbird/shared';\nimport { UtilSequenceProcess } from '@formbird/shared';\nimport { SharedConstants } from '@formbird/types';\nimport { cloneDeep } from 'es-toolkit';\nimport { Subject } from 'rxjs';\nimport { formSetDocument } from '../../redux/actions';\nimport { IApplicationState } from '../../redux/state/application.state';\nimport { AppStore } from '../../redux/store/app.store';\nimport { ClientAccessService } from '../access/client-access.service';\nimport { BroadcastService } from '../broadcast/broadcast.service';\nimport { ConfigService } from '../config/config.service';\nimport { DataService } from '../data/data.service';\nimport { NotificationService } from '../notification/notification.service';\nimport { ValidationService } from '../validation/validation.service';\nimport { ClientConstants } from './../../constants/ClientConstants';\nimport { ChangedDocumentService } from './changed-document.service';\nimport { ClientSystemHeaderService } from './client-system-header.service';\nimport { CurrentDocumentService } from './current-document.service';\nimport { DocumentUpdateService } from './document-update.service';\nimport { DocumentService } from './document.service';\nimport { FinaliseValueFieldService } from './finalise-value-field.service';\nimport { MandatoryFieldService } from './mandatory-field.service';\nimport { ModifiedFieldService } from './modified-field.service';\nimport { UnsavedDocumentService } from './unsaved-document.service';\nimport { PreProcessorFieldService } from '../preprocessor/pre-processor-field.service';\nimport { KeyValueStorageService } from '../key-value-storage/key-value-storage.service';\nimport { PendingOperationService } from '../pending-operations.service';\nimport { LoggedInUserService } from '../user/logged-in-user.service';\nimport { OfflineStatusService } from '../offline-status/offline-status.service';\nimport { DocumentSessionService } from './document-session.service';\n\nconst logger = console;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DocumentSaveService {\n  private dataService = inject(DataService);\n  private notificationService = inject(NotificationService);\n  private documentService = inject(DocumentService);\n  private unsavedDocumentService = inject(UnsavedDocumentService);\n  private currentDocumentService = inject(CurrentDocumentService);\n  private documentSessionService = inject(DocumentSessionService);\n  private mandatoryFieldService = inject(MandatoryFieldService);\n  private modifiedFieldService = inject(ModifiedFieldService);\n  private validationService = inject(ValidationService);\n  private clientSystemHeaderService = inject(ClientSystemHeaderService);\n  private documentUpdateService = inject(DocumentUpdateService);\n  private configService = inject(ConfigService);\n  private broadcastService = inject(BroadcastService);\n  private clientAccessService = inject(ClientAccessService);\n  private changedDocumentService = inject(ChangedDocumentService);\n  private finaliseValueService = inject(FinaliseValueFieldService);\n  private preProcessorFieldService = inject(PreProcessorFieldService);\n  private appStore = inject<AppStore<IApplicationState>>(AppStore);\n  private keyValueStorageService = inject(KeyValueStorageService);\n  private pendingOperationService = inject(PendingOperationService);\n  private loggedInUserService = inject(LoggedInUserService);\n  private offlineStatusService = inject(OfflineStatusService);\n\n  private savingEventBus: Subject<any>;\n  private savedEventBus: Subject<any>;\n\n  private savedDocs;\n\n  documentData: any = {};\n\n  constructor() {\n    this.savingEventBus = new Subject<any>();\n    this.savedEventBus = new Subject<any>();\n    this.currentDocumentService.documentData$.subscribe(data => {\n      this.documentData = data;\n    });\n  }\n\n  private loadOverrideTemplate(document) {\n    if (this.documentData.overrideTemplateId && this.documentData.document?.documentId === document.documentId) {\n      return this.documentData.overrideTemplateId;\n    }\n  }\n\n  private loadTemplate(document, unsavedDocumentListId) {\n\n    return this.unsavedDocumentService.getUnsavedTemplate(document.documentId, unsavedDocumentListId);\n  }\n\n  private async doPreSaveData(document, unsavedDocumentListId, preSaveFunc) {\n\n    const docBean = cloneDeep(document);\n\n    const template = this.loadTemplate(docBean, unsavedDocumentListId);\n\n    await this.preProcessorFieldService.preProcess(template, docBean);\n\n    this.finaliseValueService.finaliseFieldValues(docBean, template);\n\n    if (!docBean.systemHeader) {\n      docBean.systemHeader = {};\n    }\n\n    if (!docBean.systemHeader.systemType) {\n      docBean.systemHeader.systemType = SharedConstants.SYSTEM_TYPE_DOCUMENT;\n    }\n\n    if (UtilDocument.isNew(docBean) && !docBean.systemHeader.templateId) {\n      docBean.systemHeader.templateId = template.documentId;\n    }\n\n    this.clientAccessService.writeKeysToDocument(docBean, template);\n\n    const overrideTemplateId = this.loadOverrideTemplate(document);\n    if (overrideTemplateId) {\n      docBean.systemHeader.createdWith = overrideTemplateId;\n    } else {\n      docBean.systemHeader.createdWith = document.systemHeader.templateId;\n    }\n\n    const docContext = {} as any;\n    docContext.template = template;\n    docContext.templateId = document.systemHeader.templateId;\n    docContext.unsavedDocumentListId = unsavedDocumentListId;\n\n    return preSaveFunc(docBean, docContext);\n  }\n\n  private async doPostSaveData(document, unsavedDocumentListId) {\n    const docBean = cloneDeep(document);\n    const template = this.loadTemplate(docBean, unsavedDocumentListId);\n\n     if (document.systemHeader.systemType === SharedConstants.SYSTEM_TYPE_ACCOUNT) {\n        await this.loggedInUserService.setLoggedUser();\n    }\n\n     if (!template || !docBean) {\n      return;\n    }\n\n    const docContext = {} as any;\n    docContext.template = template;\n    docContext.templateId = document.systemHeader.templateId;\n    docContext.unsavedDocumentListId = unsavedDocumentListId;\n    return this.postSaveClientValidation(docBean, docContext);\n  }\n\n  private postSaveClientValidation(docBean, docContext) {\n    return new Promise((resolve, reject) => {\n      this.validationService.onPostSaveClientDocument(docBean, docContext, (error, result) => {\n        if (error) {\n          reject(error);\n        } else {\n          this.validationService.broadcastValidationEvent();\n          const latestDocument = this.documentService.getLoadedDocument(docBean.documentId);\n\n          const documentSession = this.documentSessionService.getDocumentSession(docBean.documentId);\n          if (documentSession._clearAfterSave) {\n            this.documentSessionService.clearDocumentSession(docBean.documentId);\n          }\n\n          resolve(latestDocument);\n        }\n      });\n    });\n  }\n\n  private shouldApplyFlags(documentListId) {\n    // Should apply flag on the document list that was attached to command bar\n    return documentListId === this.currentDocumentService.getMainDocumentListId();\n  }\n\n  private resetCleanStateDocument(doc, unsavedDocumentListId?, shouldResetStoreChanges?) {\n\n    this.documentService.resetDisableSaveFieldToDoc(doc);\n\n    this.documentService.resetOriginalDocument(doc);\n\n    if (shouldResetStoreChanges !== false) {\n      this.changedDocumentService.resetChangeDocument();\n    }\n  }\n\n  private performPostSaveEach(doc, unsavedDocumentListId?) {\n    this.doPostSaveData(doc, unsavedDocumentListId);\n\n    this.notificationService.success('Saved successfully');\n\n    if (this.modifiedFieldService.hasSavingChanged(doc.documentId)) {\n\n\n      this.modifiedFieldService.assignChangedDocumentFields(doc);\n\n      const saveChangedDoc = this.modifiedFieldService.extractSavingChangedAsDocument(doc.documentId);\n\n      console.log('Applying the changes were made on the document while pushing it into server: ', saveChangedDoc);\n\n      this.documentUpdateService.applyDocumentChangesSimple(doc, saveChangedDoc);\n\n      const shouldResetStoreChanges = Object.keys(saveChangedDoc).length === 0;\n      this.resetCleanStateDocument(doc, unsavedDocumentListId, shouldResetStoreChanges);\n\n    } else {\n      this.modifiedFieldService.removeModifiedDocumentFields(doc.documentId);\n      this.resetCleanStateDocument(doc, unsavedDocumentListId);\n    }\n\n    const key = `FB-CORE-WIP-${doc.documentId}`;\n    this.keyValueStorageService.removeItem(key);\n\n    // Put doc into an array due to avoid changing the handler in custom component\n    this.broadcastService.broadcast(ClientConstants.DOCUMENT_UPDATED, [doc]);\n  }\n\n  private async processSaveEach(modifiedDocument, unsavedDocumentListId) {\n    try {\n      const result = DocumentIdValidator.validateDocumentId(\n        modifiedDocument.documentId,\n        this.configService.clientConfig().documentIdRules\n      );\n\n      if (!result.valid) {\n        throw new Error(result.reason);\n      }\n\n      const newModifiedDoc: any = await this.reloadDocumentAndApplyUpdates(modifiedDocument, unsavedDocumentListId);\n\n      const execPreSave = async (doc) => {\n\n        const performPreSaveValidation = (docBean, docContext, runAsOffline?) => {\n          return new Promise((resolve, reject) => {\n            this.appStore.dispatch(formSetDocument(docBean));\n\n            const validationCallback = (error, result) => {\n              if (error) {\n                reject(error);\n              } else {\n                this.validationService.broadcastValidationEvent();\n                const latestDocument = this.documentService.getLoadedDocument(docBean.documentId);\n                resolve(latestDocument);\n              }\n            };\n\n            if (runAsOffline) {\n             this.validationService.onPreSaveOfflineDocument(docBean, docContext, validationCallback);\n            } else {\n              this.validationService.onPreSaveDocument(docBean, docContext, validationCallback);\n            }\n          });\n        }\n\n        try {\n          let processedDoc = await this.doPreSaveData(doc, unsavedDocumentListId, (docBean, docContext) => {\n            return performPreSaveValidation(docBean, docContext);\n          });\n\n          // run PreSaveOffline\n          if (!this.offlineStatusService.isConnected() && this.offlineStatusService.isOfflineMode()) {\n            processedDoc = await this.doPreSaveData(processedDoc, unsavedDocumentListId, (docBean, docContext) => {\n              return performPreSaveValidation(docBean, docContext, true);\n            });\n          }\n\n          if (processedDoc) {\n            const savedDoc = await this.doSaveEach(processedDoc, unsavedDocumentListId);\n            this.performPostSaveEach(savedDoc, unsavedDocumentListId);\n            return savedDoc;\n          } else {\n            const msg = 'There is an error in PreSave.';\n            logger.error(msg);\n            throw new Error(msg);\n          }\n        } catch (error) {\n          logger.info('Saving data error...' + JSON.stringify(error));\n          throw error;\n        }\n      };\n\n      if (newModifiedDoc.systemHeader?.deleted === true) {\n        const docContext = {\n          documentData: this.documentData,\n          template: this.documentData.template,\n          templateId: this.documentData.template.documentId,\n          formParameters: {\n            overrideTemplateId: this.documentData.overrideTemplateId,\n            selectedDocumentId: newModifiedDoc.documentId,\n            hierarchyInfo: this.documentData.hierarchyInfo,\n            isMainDoc: this.documentData.isMainDoc\n          }\n        };\n\n        return new Promise((resolve, reject) => {\n          this.validationService.preDeleteClient(newModifiedDoc, docContext, async (error, result) => {\n            if (error) {\n              reject(error);\n            } else {\n              try {\n                const savedDoc = await execPreSave(newModifiedDoc);\n                resolve(savedDoc);\n              } catch (err) {\n                reject(err);\n              }\n            }\n          });\n        });\n      } else {\n        return await execPreSave(newModifiedDoc);\n      }\n    } catch (err) {\n      logger.info('Saving data error...' + JSON.stringify(err));\n      throw err;\n    }\n  }\n\n\n  private async doSaveEach(docBean, unsavedDocumentListId) {\n    if (docBean) {\n      logger.info('Saving document: ' + docBean.documentId);\n\n      const includeDeleted = true;\n      const docExists = await this.dataService.documentExists(docBean.documentId, includeDeleted);\n\n      const tpl = this.documentService.getTemplateFromDoc(docBean);\n      let originalDoc;\n\n      if (docExists) {\n        originalDoc = this.documentService.getExistingDocument(docBean.documentId);\n\n        if (!originalDoc && this.configService.clientConfig().useSaveConflictResolution) {\n          originalDoc = this.documentService.getExistingDocument(docBean.systemHeader.previousVersionId);\n\n        } else if (!originalDoc) {\n          originalDoc = this.documentService.getExistingDocument(docBean.systemHeader.versionId);\n        }\n      }\n\n      await this.clientSystemHeaderService.updateSystemHeader(docBean, tpl, originalDoc || docBean);\n\n      this.modifiedFieldService.setPushingData(true, docBean.documentId);\n\n      const isCreationMode = UtilDocument.isNew(docBean) || !docExists; // insert as new if not found\n      if (isCreationMode) {\n        const savedDoc = await this.dataService.insert(docBean);\n        this.savedDocs.push(savedDoc);\n        logger.info('Document inserted: ' + savedDoc.documentId);\n\n        this.modifiedFieldService.resetPushingData(docBean.documentId);\n\n        return savedDoc;\n      } else {\n        if (!originalDoc) { // docExists but no access\n          throw new Error('Unable to update! No access to document: ' + docBean.documentId);\n        } else {\n          const overrideTemplateId = this.loadOverrideTemplate(docBean);\n\n          const options = {\n            overrideTemplateId: overrideTemplateId,\n            templateId: originalDoc ? originalDoc.systemHeader.templateId : docBean.systemHeader.templateId,\n            makeCurrentVersion: this.unsavedDocumentService.getDocumentOptionKey(unsavedDocumentListId,\n              docBean.documentId, SharedConstants.MAKE_CURRENT_VERSION_KEY),\n            importPreviousVersion: this.unsavedDocumentService.getDocumentOptionKey(unsavedDocumentListId,\n              docBean.documentId, SharedConstants.IMPORT_PREVIOUS_VERSION)\n          };\n\n          const savedDoc: any = await this.dataService.jsonPatchUpdate(originalDoc, docBean, options);\n          this.savedDocs.push(savedDoc);\n          logger.info('Document updated: ' + savedDoc.documentId);\n\n          this.modifiedFieldService.resetPushingData(docBean.documentId);\n\n          return savedDoc;\n        }\n      }\n    }\n  }\n\n  setFlags(dirtyFlag, spinnerFlag, saveFlag, unsavedDocumentListId?) {\n\n    if (spinnerFlag !== undefined) {\n      this.modifiedFieldService.setShowSpinner(spinnerFlag, unsavedDocumentListId);\n    }\n\n    if (saveFlag !== undefined) {\n      this.modifiedFieldService.setSaveFlag(saveFlag, unsavedDocumentListId);\n    }\n\n    if (saveFlag) {\n      // Saving means the update on form is allowed,\n      // so set updateAllowed flag to true in order to show the dirty again in case saving errors\n      this.modifiedFieldService.setUpdateAllowed(true);\n    }\n\n    if (dirtyFlag !== undefined) {\n      this.modifiedFieldService.setDirty(dirtyFlag, null, unsavedDocumentListId);\n    }\n  }\n\n  private doSave(unsavedDocumentListId) {\n\n    const _self = this;\n\n    return new Promise((resolve, reject) => {\n\n      try {\n        // check mandatory fields in all documents getUnsavedDocuments will throw an exception\n        // if the unsavedDocumentListId is unknown\n        const unsavedDocumentDatas = _self.unsavedDocumentService.getUnsavedDocumentDatas(unsavedDocumentListId);\n\n        _self.mandatoryFieldService.isMandatoryAnswered(unsavedDocumentDatas).then(\n          function successFunc() {\n\n            // 11003: only save modified documents. Don't save the parent if only a child has changed\n            const modifiedDocuments = _self.modifiedFieldService.getModifiedDocuments(unsavedDocumentListId);\n\n            if (modifiedDocuments?.length) {\n\n              _self.savedDocs = [];\n\n              // save documents sequentially so that all document saves aren't sent to the server at the\n              // same time. See the notes of Mantis 11213 for further details\n              UtilSequenceProcess.processList(modifiedDocuments, (modifiedDocument) => {\n                return _self.processSaveEach(modifiedDocument, unsavedDocumentListId);\n              }).then(\n                function allPromiseSuccessFunc() {\n\n                  if (_self.savedDocs && _self.savedDocs.length > 0) {\n                    resolve(_self.savedDocs);\n\n                  } else {\n                    reject(new Error('No results returned from save'));\n                  }\n                },\n                function errorFunc(err) {\n                  logger.info('Saving data got errors...' + JSON.stringify(err));\n\n                  reject(err);\n                });\n\n            } else {\n              logger.info('Exit saving because there is no modified document.');\n              // resolve with no document because there's no save\n              resolve(null);\n            }\n\n          }, function errorFunc(err) {\n            reject(err);\n          });\n\n      } catch (e) {\n        // pass through the error with no additional messages so that the error is\n        // nicely formatted for display\n        reject(new Error(e));\n      }\n\n    });\n\n  }\n\n  private reloadDocumentAndApplyUpdates(modifiedDoc, unsavedDocumentListId) {\n\n    const _self = this;\n\n    return new Promise(async (resolve, reject) => {\n\n      var isMakingCurVer = _self.unsavedDocumentService.getDocumentOptionKey(\n        unsavedDocumentListId, modifiedDoc.documentId, SharedConstants.MAKE_CURRENT_VERSION_KEY);\n\n      if (UtilDocument.isNew(modifiedDoc)) {\n\n        //should only perform checking and updating if caching is not enabled\n        if (this.offlineStatusService.isCachingEnabled() === false) {\n          await _self.documentUpdateService.applyDocumentCreated(modifiedDoc);\n        }\n\n        resolve(modifiedDoc);\n\n      } else if (UtilDocument.isPreviousVersion(modifiedDoc) || isMakingCurVer) {\n\n        resolve(modifiedDoc);\n\n      } else {\n\n        const documentId = modifiedDoc.documentId;\n\n        let oldOriginalDoc = _self.documentService.getExistingDocument(documentId);\n        if (!oldOriginalDoc) {\n          oldOriginalDoc = _self.documentService.getExistingDocument(modifiedDoc.systemHeader.versionId);\n        }\n\n        if (oldOriginalDoc) {\n\n          // load the latest version from DB first\n          _self.dataService.getDocument(documentId).then(\n            function successFunc(latestDoc) {\n\n              if (oldOriginalDoc.systemHeader.versionId !== latestDoc.systemHeader.versionId) {\n                let diffs = UtilConflict.getDiffs(oldOriginalDoc, latestDoc);\n                if (diffs.length) {\n                  // get the changed fields by rules and user on form\n                  diffs = UtilConflict.getDiffs(oldOriginalDoc, modifiedDoc);\n\n                  // update the latest version to current original version\n                  _self.documentService.resetOriginalDocument(latestDoc);\n\n                  // create a new copied version from the latest one\n                  const newModifiedDoc = cloneDeep(latestDoc);\n\n                  // apply the changes by rules and user on form to the new document\n                  if (diffs.length) {\n                    diffs.forEach(function (diff) {\n                      newModifiedDoc[diff.fieldName] = modifiedDoc[diff.fieldName];\n                    });\n                  }\n\n                  const template = _self.loadTemplate(newModifiedDoc, unsavedDocumentListId);\n                  if (template && template.components && template.components.length) {\n\n                    template.components.forEach(function (component) {\n\n                      if (!UtilType.isDefined(newModifiedDoc[component.name])) {\n\n                        if (UtilType.isDefined(component.defaultValue)) {\n\n                          newModifiedDoc[component.name] = component.defaultValue;\n                        }\n                      }\n                    });\n                  }\n\n                  // set the new changed version to unsaved list\n                  _self.unsavedDocumentService.setDocument(unsavedDocumentListId, newModifiedDoc);\n\n                  resolve(newModifiedDoc);\n                } else {\n                  resolve(modifiedDoc);\n                }\n              } else {\n                resolve(modifiedDoc);\n              }\n            },\n            function errorFunc(err) {\n              reject(err);\n            }\n          );\n        } else {\n          resolve(modifiedDoc);\n        }\n      }\n    });\n\n  }\n\n  public save(unsavedDocumentListId) {\n\n    const _self = this;\n\n    return new Promise(async (resolve, reject) => {\n\n      if (!unsavedDocumentListId) {\n        reject(new Error('Unsaved document list id not provided in save'));\n\n      } else if (_self.modifiedFieldService.isSaving()) {\n        reject(new Error('Save is already in progress'));\n\n      } else {\n\n        _self.setFlags(false, true, true, unsavedDocumentListId);\n\n        try {\n          await _self.pendingOperationService.waitForPendingOperations();\n        } catch (e) {\n          _self.setFlags(true, false, false, unsavedDocumentListId);\n          reject(e);\n          return;\n        }\n\n        _self.doSave(unsavedDocumentListId).then(\n          async function doSaveSuccess(docs: []) {\n            // reset temporary array of saved documents\n            _self.savedDocs = null;\n\n            if (docs) {\n              for (let id = 0; id < docs.length; id++) {\n                const doc: any = cloneDeep(docs[id]);\n\n                // Remove offline info before applying the changes\n                if (doc.systemHeader) {\n                  delete doc.systemHeader.offline;\n                }\n\n                const unsavedDocuments = _self.modifiedFieldService.getModifiedDocuments(unsavedDocumentListId);\n\n                await _self.documentUpdateService.updateFormDocument(unsavedDocuments, doc);\n              }\n            }\n\n            if (_self.modifiedFieldService.hasAnySavingChanged()) {\n              _self.setFlags(true, false, false, unsavedDocumentListId);\n              _self.modifiedFieldService.removeAllSavingChangedDocumentFields();\n            } else {\n              _self.setFlags(false, false, false, unsavedDocumentListId);\n            }\n\n            resolve(docs);\n          },\n          function errorFunc(err) {\n            _self.setFlags(true, false, false, unsavedDocumentListId);\n\n            reject(err);\n          });\n      }\n    });\n\n  }\n\n  async saveDocumentLists(documentListIds) {\n\n    const result = {\n      data: null,\n      error: null\n    };\n\n    const _self = this;\n\n    this.broadcastSaving(true);\n\n    _self.broadcastService.broadcast(ClientConstants.VALIDATE_FORM_FIELDS);\n\n    try {\n\n      const unsavedDocumentListIds = _self.modifiedFieldService.getAllChangedDocumentListIds();\n\n      // save documents sequentially so that all document saves aren't sent to the server at the\n      // same time. See the notes of Mantis 11213 for further details\n      function asyncJob(documentListId) {\n        if (documentListId) {\n\n          if (UtilArray.contains(unsavedDocumentListIds, documentListId)) {\n            return _self.save(documentListId);\n          }\n\n        }\n      }\n\n      result.data = await UtilSequenceProcess.processList(documentListIds, asyncJob);\n      if (result.data) {\n        this.broadcastDocumentSaved(result.data.map(documentObj => documentObj?.documentId));\n      }\n    } catch (err) {\n      result.error = err;\n    } finally {\n      this.broadcastSaving(false);\n\n    }\n\n    return result;\n\n  }\n\n  private broadcastSaving(data) {\n    this.savingEventBus.next(data);\n  }\n\n  onDocumentSaving() {\n    return this.savingEventBus.asObservable();\n  }\n\n  private broadcastDocumentSaved(documentIds) {\n    this.savedEventBus.next(documentIds);\n  }\n\n  onDocumentSaved() {\n    return this.savedEventBus.asObservable();\n  }\n\n}\n","import { DataService } from '../data/data.service';\nimport { Injectable, OnDestroy, OnInit, inject } from '@angular/core';\nimport { CurrentDocumentService } from './current-document.service';\nimport { DocumentService } from './document.service';\n\n@Injectable()\nexport class TemplateService implements OnInit, OnDestroy {\n  private currentDocumentService = inject(CurrentDocumentService);\n  private documentService = inject(DocumentService);\n  private dataService = inject(DataService);\n\n\n  documentData: any;\n  sub: any;\n\n  constructor() {\n    this.sub = this.currentDocumentService.documentData$.subscribe(data => {\n      this.documentData = data;\n    });\n  }\n\n  ngOnInit() {\n\n  }\n\n  ngOnDestroy() {\n    this.sub.unsubscribe();\n  }\n\n  async loadTemplate(doc, unsavedTemplates) {\n    let tpl;\n\n    let templateId = this.documentData.overrideTemplateId;\n\n    if (templateId && this.documentData.document.documentId === doc.documentId) {\n\n      tpl = this.documentService.getExistingDocument(templateId);\n    \n    } else {\n    \n      templateId = doc.systemHeader.templateId;\n\n      const filteredTemplates = unsavedTemplates?.filter(template => template.documentId === templateId);\n      \n      if (filteredTemplates.length) {\n        tpl = filteredTemplates[0];\n      }\n    \n    }\n\n    if (tpl) {\n      return Promise.resolve(tpl);\n    }\n\n    // template not loaded. This can happen in circumstances like editing in the template editor.\n    // Get the template from the server\n    return await this.dataService.getDocument(templateId);\n  }\n}\n","import { Injectable } from '@angular/core';\n\nlet StorageEventService$;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class StorageEventService {\n\n  private listeners = [];\n\n  constructor(\n  ) {\n    StorageEventService$ = this;\n  }\n\n  addListener(callback) {\n    this.listeners.push(callback);\n  }\n\n  private storage(event) {\n    for (let i = 0; i < StorageEventService$.listeners.length; i++) {\n      StorageEventService$.listeners[i](event);\n    }\n  }\n\n  start() {\n    window.addEventListener('storage', this.storage);\n  }\n\n  end() {\n    this.listeners = [];\n    window.removeEventListener('storage', this.storage);\n  }\n\n}\n","import { Injectable, inject } from '@angular/core';\nimport { SharedUrlRoutes, UtilDocumentId,  UtilFileReference, UtilUploads } from '@formbird/shared';\nimport { OfflineStatusService } from '../offline-status/offline-status.service';\nimport { IndexedDBService } from '../indexeddb/indexed-db.service';\nimport { LoggedInUserService } from '../user/logged-in-user.service';\nimport { IndexedDBConstants } from '@formbird/indexed-db';\nimport { HttpClient, HttpRequest } from '@angular/common/http';\nimport { from } from 'rxjs';\nimport { cloneDeep } from 'es-toolkit';\nimport { SharedConstants, DocumentInfo, FormParameters, DocumentChangedInfo, FileReferenceDetails} from '@formbird/types';\nimport { DataService } from '../data/data.service';\nimport { ConfigService } from '../config/config.service';\nimport { ClientAccessService } from '../access/client-access.service';\nimport { IApplicationState } from '../../redux/state/application.state';\nimport { formDocumentChanged} from '../../redux/actions/form-new.actions';\nimport { AppStore } from '../../redux/store/app.store';\nimport { ModifiedFieldService } from '../document/modified-field.service';\nimport { CurrentDocumentService } from '../document/current-document.service';\nimport { ValidationService } from '../validation/validation.service';\nimport * as  mime from 'mime-types';\nimport { OpfsCacheService } from '../opfs/opfs-cache.service';\n\n// Get window.URL object\nconst URL = window.URL; /*|| window.webkitURL;*/\nconst logger = console;\n\ninterface options{\n  isOnline?: boolean,\n  isCommandBarUpload?: boolean,\n  docFieldName?: string,\n  fileReferenceDocumentId?: string,\n  fileReferenceTemplateId?: string,\n  shouldSaveOffline?: boolean\n}\n@Injectable({\n  providedIn: 'root'\n})\nexport class FileProviderService {\n  private loggedInUserService = inject(LoggedInUserService);\n  private indexedDBService = inject(IndexedDBService);\n  private offlineStatusService = inject(OfflineStatusService);\n  private httpClient = inject(HttpClient);\n  private dataService = inject(DataService);\n  private configService = inject(ConfigService);\n  private clientAccessService = inject(ClientAccessService);\n  private appStore = inject<AppStore<IApplicationState>>(AppStore);\n  private modifiedFieldService = inject(ModifiedFieldService);\n  private opfsCacheService = inject(OpfsCacheService);\n  private currentDocumentService = inject(CurrentDocumentService);\n  private validationService = inject(ValidationService);\n\n\n  /**\n   * Retrieves the file from offline storage first, if unsuccessful retrieve from server.\n   */\n  /**\n   * Retrieves the file from offline storage first, if unsuccessful retrieve from server.\n   */\n  async getFileResources(file: Pick<FileReferenceDetails, 'fileNo'> & Partial<Pick<FileReferenceDetails, 'fileName'>>) {\n\n    const url = `${SharedUrlRoutes.serverRoutes.loadFile}/${file.fileNo}`;\n\n    if (!this.offlineStatusService.isCachingEnabled()) {\n      return {\n        base64strData: null,\n        url\n      }\n    }\n\n    try{\n      const cachedFile = await this.opfsCacheService.getCachedFile(file.fileNo);\n      if (cachedFile !== null) {\n        const idbFile: any = await this.getFile(file.fileNo);\n        const mimeType = idbFile?.mimeDetailsObj?.contentType ?? idbFile.uploadConfig?.mimetype;\n        const fileName = idbFile.uploadConfig?.originalname ?? file.fileName ?? file.fileNo;\n        const newFile = new File([cachedFile], fileName, { type: mimeType });\n        return {\n          base64strData: await this.indexedDBService.toBase64Str(newFile),\n          url\n        }\n      } else {\n        return {\n          url\n        }\n      }\n    } catch(err) {\n      logger.error(err.message);\n      return {\n        base64strData: null,\n        url\n      }\n    }\n\n  }\n\n  private async getFile(fileNo){\n    return new Promise(async (resolve, reject) => {\n      this.indexedDBService.getFile(fileNo, (file) => {\n        resolve(file);\n      });\n    });\n  }\n\n  /**\n   * Sends the file directly to server.\n   */\n  async onlineFileUpload(uploadConfig) {\n    if (!uploadConfig) {\n      throw new Error('No file details passed in file upload.');\n    }\n    const shouldSaveOffline = await this.shouldSaveOffline();\n    const fileData: any = uploadConfig;\n    const type = fileData.mimetype;\n    const file = new File([fileData.file], fileData.originalname, { type: type });\n    const options: any = {isOnline: true, shouldSaveOffline: shouldSaveOffline};\n    options.fileReferenceDocumentId = fileData.fileReferenceDocumentId;\n    let response: any = await this.uploadFileToServer(fileData.fileNo, file, fileData.documentId, fileData.documentName, options)\n      .toPromise();\n    const uploaded = response.body;\n\n    uploadConfig.fileNo = uploaded.fileNo;\n    uploadConfig.basePath = uploaded.basePath;\n    uploadConfig.fileType = uploaded.fileType;\n\n    await this.updateFileReferenceDocument(uploadConfig, uploaded);\n\n    return ({ data: uploaded });\n  }\n\n  private uploadFileToServer(fileNo: string, file: File, documentId: string, documentName: string, options: options) {\n    const maxUploadSize = parseInt(this.configService.clientConfig().maxUploadSize) || SharedConstants.DEFAULT_MAX_UPLOAD_SIZE;\n    if (file && file.size && file.size > (maxUploadSize * 1024 * 1024)){\n\n        const errMsg = 'The file is too large. Allowed maximum size is ' + maxUploadSize + \"mb\";\n        return from(Promise.reject(new Error(errMsg)));\n\n    } else {\n\n      const postUrl = SharedUrlRoutes.serverRoutes.uploadFiles;\n      if (!options) {\n        options = {};\n      }\n      let uploadConfig = {\n          fileNo: fileNo, file: file, originalname: file.name, mimetype: file.type\n          , documentId: documentId, documentName: documentName\n          , isCommandBarUpload: options.isCommandBarUpload\n          , docFieldName: options.docFieldName\n          , options\n      };\n\n      if ( (this.loggedInUserService.isUserOfflineMode() && !options.isOnline) || options?.shouldSaveOffline) {\n\n        return from(this.offlineFileUpload(uploadConfig));\n\n      } else {\n\n        const myFormData: FormData = new FormData();\n        myFormData.append('fileNo', fileNo);\n        myFormData.append('file', file);\n        myFormData.append('documentId', documentId);\n        myFormData.append('documentName', documentName);\n        myFormData.append('fileReferenceTemplateId', options?.fileReferenceTemplateId);\n        if(options.fileReferenceDocumentId){\n          myFormData.append('isCreatedFileReference', 'true');\n        }\n\n        const config = new HttpRequest('POST', postUrl, myFormData, {\n          reportProgress: true\n        });\n        return from(this.saveToServer(config, uploadConfig));\n\n      }\n    }\n  }\n\n  private async saveToServer(config, uploadConfig) {\n\n      const offlineMode =  this.offlineStatusService.isCachingEnabled() && this.offlineStatusService.isInitialCachingComplete();\n      try{\n        const response = await this.httpClient.request(config).toPromise();\n        return response;\n      }catch (err) {\n         if (offlineMode && err?.status === 503) {\n            return this.offlineFileUpload(uploadConfig);\n          } else {\n            throw err;\n          }\n      }\n\n  }\n  private createFileReferenceDocument(uploadConfig, fileUploaderConfig){\n    return new Promise(async (resolve, reject) => {\n      try {\n\n        const fileData = uploadConfig;\n        const mimetype = fileData.mimetype;\n        const fileType = (mime.extension(mimetype) || '').toUpperCase();\n        const fileReferenceTemplateId = uploadConfig?.options?.fileReferenceTemplateId || fileUploaderConfig?.defaultTemplateId;\n\n        if (!UtilUploads.whiteListed(fileType, fileUploaderConfig)) {\n          throw new Error(`File type not allowed: ${fileType}`);\n        }\n\n        if (!fileReferenceTemplateId) {\n          throw new Error('Invalid configuration values for generating reference document.');\n        }\n\n        const fileName = fileData.originalname;\n        const fileNo = fileData.fileNo;\n\n\n        //prepare data for creating file reference\n        const meta: any = {\n\n          file: {\n            fileNo,\n            fileName: fileName,\n            fileType: fileType\n          },\n\n          parent: {//parent document id\n            documentId: fileData.documentId,\n            name: fileData.documentName\n          }\n\n        };\n\n        if (mimetype) {\n          meta.file.ext = fileName.substring(fileName.lastIndexOf('.') + 1, fileName.length);\n          meta.file.mimeDetailsObj = {\n            contentType: mimetype\n          };\n        }\n\n\n        //create file reference\n        const frTemplate = await this.dataService.getDocument(fileReferenceTemplateId);\n\n        UtilFileReference.constructFileReferenceDocument(meta.file, meta.parent,\n          uploadConfig?.options?.fileReferenceTemplateId, fileUploaderConfig,\n          async (err, fileRefDoc) => {\n          if (err){\n            reject(err);\n          } else {\n            if (!fileRefDoc.documentId) {\n              fileRefDoc.documentId = UtilDocumentId.generateId();\n            }\n\n            this.clientAccessService.writeKeysToDocument(fileRefDoc, frTemplate);\n            this.dataService.insert(fileRefDoc)\n              .then(function successFunc(data) {\n                logger.info('Created reference document ' + data.documentId + ' for ' + fileNo + '.');\n                resolve(data);\n              }, function errorFunc(err) {\n                const msg = 'Failed to create reference document for ' + fileNo + ' to ' + fileData.documentId + '.';\n                logger.error(err.message);\n                reject(new Error(msg));\n              });\n          }\n        });\n\n\n      } catch (err){\n        reject(err);\n      }\n    });\n  }\n\n  private updateFileReferenceDocument(uploadConfig, uploadedData){\n\n    return new Promise(async (resolve, reject) => {\n      try {\n        const fileData = uploadConfig;\n        //updating offline fileReference document with uploaded fileNo.\n        if (fileData.fileReferenceDocumentId) {       \n           //Update offline fileReference document with the uploaded fileNo\n          await new Promise((res, rej) => {\n            this.indexedDBService.getDocumentCurrentVersion(fileData.fileReferenceDocumentId, (refDoc) => {\n              if (refDoc) {\n                refDoc[fileData.fileUploaderField][0].fileNo = uploadedData.fileNo;\n                refDoc[fileData.fileUploaderField][0].basePath = uploadedData.basePath;\n                this.indexedDBService.saveEntry(IndexedDBConstants.DOCUMENT_TABLE_NAME, refDoc, (result)=> {\n                  res(result);\n                });\n              } else {\n                logger.log(\"File reference document not found.\");\n                res(true);\n              }\n            });\n          });\n\n          let originalFRDoc;\n\n          originalFRDoc = await this.dataService.getDocument(fileData.fileReferenceDocumentId);\n          if (originalFRDoc) {\n            const frDocument = cloneDeep(originalFRDoc);\n            frDocument[fileData.fileUploaderField][0].fileNo = uploadedData.fileNo;\n            frDocument[fileData.fileUploaderField][0].basePath = uploadedData.basePath;\n            await this.dataService.deepDiffUpdate(originalFRDoc, frDocument);\n          }\n           resolve(true);\n        } else {\n           resolve(true);\n        }\n\n      } catch (err){\n        logger.error(\"Error on offline file reference document update: \" + JSON.stringify(err));\n        reject(err);\n      }\n    });\n  }\n\n  private doPreSaveOffline() {\n    if (this.offlineStatusService.isConnected() || !this.offlineStatusService.isOfflineMode()) {\n      return;\n    }\n\n    const { document, template } = this.currentDocumentService.getDocumentData()\n    const docContext = {} as any;\n    docContext.template = template;\n    docContext.templateId = document.systemHeader.templateId;\n    // docContext.unsavedDocumentListId = unsavedDocumentListId;\n\n    return new Promise((resolve, reject) => {\n      this.validationService.onPreSaveOfflineDocument(document, docContext, (err, result) => {\n        if (err) {\n          reject(err);\n        } else {\n          resolve(result);\n        }\n      });\n    });\n  }\n\n  /**\n   * Saves to offline database. The OfflinePoller sends it to the server later\n   */\n  private offlineFileUpload(uploadConfig) { //\n\n    const _self = this;\n\n    return new Promise(async (resolve, reject) => {\n      try {\n          const clientConfig = this.configService.clientConfig();\n          const fileUploaderConfig : any =  clientConfig.fileUploader || {};\n          await this.doPreSaveOffline();\n          const fileRefDoc: any = await this.createFileReferenceDocument(uploadConfig, fileUploaderConfig);\n          uploadConfig.fileReferenceDocumentId = fileRefDoc.documentId;\n          uploadConfig.fileUploaderField = fileUploaderConfig.fileUploaderField;\n\n          const blob = uploadConfig.file;\n\n          let fileDetails = await this.getFileDetails(uploadConfig);\n\n          await _self.opfsCacheService.cacheFile(uploadConfig, blob);\n\n          await _self.indexedDBService.saveFile({\n            fileNo: uploadConfig.fileNo,\n            uploadConfig: fileDetails,\n            status: IndexedDBConstants.OFFLINE_STATUS_PENDING // 'UPLOADED' or 'PENDING'\n          });\n\n\n\n          resolve({\n            body: {fileNo: uploadConfig.fileNo},\n            status: 200,\n            data: 'OK'\n          });\n\n\n      } catch (err) {\n        reject(err);\n      }\n    });\n  }\n\n  private getFileDetails(uploadConfig) {\n    return new Promise(async (resolve, reject) => {\n      try{\n        const options  =  uploadConfig.options;\n        let fileDetails: any  = {};\n        for(var key in uploadConfig) {\n          if (key !== 'options'){\n            fileDetails[key] = uploadConfig[key];\n          }\n        }\n        fileDetails = {...fileDetails, ...options};\n        delete fileDetails.file;\n        resolve(fileDetails);\n      }catch (err) {\n        reject(err)\n      }\n\n    });\n  }\n\n  downloadFile(file) {\n\n    if (!file.resources.base64strData) {\n      window.open(file.resources.url);\n      return;\n    }\n\n    const objectURL = URL.createObjectURL(this.dataURLtoFile(file.resources.base64strData, file.fileName));\n\n    const anchor = document.createElement('a');\n    anchor.download = file.fileName;\n    anchor.href = objectURL;\n    anchor.click();\n\n    URL.revokeObjectURL(objectURL);\n  }\n\n  // helpers\n  private dataURLtoFile(dataurl, filename) {\n\n    const arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],\n      bstr = atob(arr[1]);\n    let n = bstr.length;\n    const u8arr = new Uint8Array(n);\n\n    while (n--) {\n      u8arr[n] = bstr.charCodeAt(n);\n    }\n\n    return new File([u8arr], filename, { type: mime });\n  }\n\n  uploadFile(uploadConfig) {\n\n    if ((this.loggedInUserService.isUserOfflineMode() && !this.offlineStatusService.isConnected()) || this.offlineStatusService.isOfflineMode() ) {\n      uploadConfig.isOnline = false;\n    } else {\n      uploadConfig.isOnline = true;\n    }\n\n    return this.uploadFileToServer(uploadConfig.fileNo, uploadConfig.file, uploadConfig.documentId, uploadConfig.documentName, uploadConfig);\n\n  }\n\n  private updateFileInfo(document, uploadConfig){\n      const _self = this;\n\n    return new Promise(async (resolve, reject) => {\n      if (uploadConfig.isCommandBarUpload) {\n        const DOCUMENT_FIELD_NAME = SharedConstants.DOCUMENT_FIELD_NAME_UPLOAD_FILE;\n        // save as the template's image on navbar\n        document.systemHeader[DOCUMENT_FIELD_NAME] = uploadConfig.fileNo;\n      } else {\n        this.indexedDBService.loadCachedDocByVersion(document.documentId, document.systemHeader.previousVersionId, function(cacheObject) {\n          const oldFieldValues = cacheObject ? cacheObject[uploadConfig.docFieldName] : null;\n          _self.updateFileInfoFieldValue(document, uploadConfig, oldFieldValues);\n          resolve(true);\n        });\n      }\n    });\n  }\n\n  private updateFileInfoFieldValue(document, uploadConfig, oldFieldValues?){\n    if (uploadConfig.docFieldName){\n      const fileRecord: any = {\n        fileNo : uploadConfig.fileNo,\n        fileName: uploadConfig.originalname,\n        fileType: uploadConfig.fileType,\n        basePath: uploadConfig.basePath,\n      };\n      let isExists = false;\n      let documentFiles = document[uploadConfig.docFieldName];\n      if (documentFiles && documentFiles.length > 0){\n        for(let i=0; i<documentFiles.length; i++){\n          const item = documentFiles[i];\n          if (item.fileNo === uploadConfig.fileNo){\n            item.basePath = uploadConfig.basePath;\n            if (uploadConfig.fileNo){\n              item.fileNo = uploadConfig.fileNo;\n              item.fileType = uploadConfig.fileType;\n            }\n            isExists = true;\n          } else if (oldFieldValues) {\n            oldFieldValues.map(obj => {\n              if (obj.fileNo === item.fileNo) {\n                  item.basePath = obj.basePath ? obj.basePath  : item.basePath;\n                  item.fileType = obj.fileType ? obj.fileType  : item.fileType;\n              }\n            });\n          }\n        }\n      }else{\n        documentFiles = [];\n      }\n      if (!isExists){\n        document[uploadConfig.docFieldName] =  [...documentFiles, fileRecord];\n      }\n    }\n  }\n\n  updateSentFileToOfflineDoc(docId, processedFiles): Promise<void> {\n\n    const _self = this;\n\n    return new Promise(async (resolve, reject) => {\n\n      const indexValue = docId;\n      if (indexValue) {\n        try{\n          const originalDoc = await this.dataService.getDocument(docId);\n\n          //used for new document\n          let currentDoc = cloneDeep(this.appStore.getState().formState.documents[docId]);\n\n          const docInfo: DocumentInfo = this.appStore.getState().formState.documentInfo;\n          const unsavedDocumentListIds = Object.keys(docInfo);\n          let unsavedDocListId = null;\n          unsavedDocumentListIds.forEach(function(unsavedDocumentListId) {\n            if (docInfo[unsavedDocumentListId][docId]) {\n              unsavedDocListId = unsavedDocumentListId;\n            }\n          });\n\n          const cachedObject =  currentDoc ? cloneDeep(currentDoc) : originalDoc;\n\n          let fieldName;\n          if (cachedObject) {\n\n            for(let i=0; i<processedFiles.length; i++){\n              fieldName = processedFiles[i].uploadConfig.docFieldName;\n              await this.updateFileInfo(cachedObject, processedFiles[i].uploadConfig);\n            }\n\n            if (unsavedDocListId && this.modifiedFieldService.isDirty()){\n              const formParameters = {} as FormParameters;\n              formParameters.unsavedDocumentListId = unsavedDocListId;\n              const documentChangedInfo: DocumentChangedInfo = {\n                documentId: docId,\n                fieldName: fieldName,\n                newValue: cachedObject[fieldName],\n                formParameters: formParameters\n              };\n              this.appStore.dispatch(formDocumentChanged(documentChangedInfo));\n            } else {\n              const updatedDoc = await this.dataService.deepDiffUpdate(originalDoc, cachedObject);\n              await this.doUpdateCachedObject(updatedDoc);\n            }\n\n            resolve();\n          } else {\n            logger.error(\"Error on updating send file details to the offline document\");\n            reject();\n          }\n\n        }catch(err){\n          logger.error(err);\n          logger.error(\"Error on updating send file details to the offline document\");\n          reject();\n        }\n\n      } else {\n        resolve();\n      }\n\n    });\n\n  }\n\n\n  private doUpdateCachedObject(cachedObject): Promise<void> {\n\n    const _self = this;\n\n    return new Promise((resolve, reject) => {\n\n      _self.indexedDBService.saveEntry(IndexedDBConstants.DOCUMENT_TABLE_NAME, cachedObject, function (err) {\n\n        if (!err) {\n          resolve();\n\n        } else {\n          reject();\n        }\n      });\n\n    });\n\n  }\n\n\n  private shouldSaveOffline = () => {\n      return new Promise(async (resolve, reject) => {\n        if (!this.offlineStatusService.isOfflineMode()){\n          resolve(false);\n        } else {\n          const connectedToServer = await this.offlineStatusService.checkServerConnectionStatus();\n          const pendingSyncCount: any = await this.indexedDBService.getUnprocessedDocsCount();\n          if (pendingSyncCount < 1 && this.offlineStatusService.shouldOperateOnline() && connectedToServer) {\n            resolve(false);\n          } else {\n            resolve(true);\n          }\n\n        }\n      });\n  }\n\n}\n","import { Injectable, inject } from '@angular/core';\nimport { IndexedDBConstants } from '@formbird/indexed-db';\nimport { LoggedInUserService } from '../user/logged-in-user.service';\nimport { IndexedDBService } from './indexed-db.service';\nimport { OfflineStatusService } from '../offline-status/offline-status.service';\n\nconst logger = console;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class IndexedDBPropertiesService {\n  private loggedInUserService = inject(LoggedInUserService);\n  private indexedDBService = inject(IndexedDBService);\n  private offlineStatusService = inject(OfflineStatusService);\n\n\n  setItem(key: string, value: any) {\n\n    if (!this.offlineStatusService.isCachingEnabled()) {\n      logger.error('Attempting to use IndexedDBPropertiesService while caching disabled.');\n      return Promise.reject(new Error('Offline is disabled.'));\n    }\n\n    const _self = this;\n\n    const record = {\n      key: key,\n      value: value\n    };\n\n    return new Promise((resolve, reject) => {\n      _self.indexedDBService.saveEntry(IndexedDBConstants.FT_PROPERTIES_TABLE_NAME, record, function (err) {\n\n        if (err) {\n          if (err.name === \"OpenFailedError\") {\n            reject(new Error('Offline is not supported in this browser. If using Private Mode, you may not be able to use it in this browser.'));\n          } else {\n            reject(new Error('Error in setting IDBProperties key ' + key));\n          }\n        } else {\n          resolve(record);\n        }\n      });\n    });\n\n  }\n\n  getItem(key: string) {\n\n    const _self = this;\n\n    if (!this.offlineStatusService.isCachingEnabled()) {\n      logger.error('Attempting to use IndexedDBPropertiesService while caching disabled.');\n      return Promise.reject('Offline is disabled.');\n    }\n\n    return new Promise((resolve, reject) => {\n\n      const tbl = IndexedDBConstants.FT_PROPERTIES_TABLE_NAME;\n      const index = IndexedDBConstants.FT_PROPERTIES_TABLE_INDEX_KEY;\n\n      _self.indexedDBService.getEntries(tbl, index, key, function (entries) {\n\n        if (entries.length > 0) {\n          resolve(entries[0]); // get first item.\n\n        } else {\n          reject(new Error('Error in getting IDBProperties key ' + key));\n        }\n\n      });\n\n    });\n\n  }\n\n  removeItem(key: string) {\n\n    const _self = this;\n\n    return new Promise((resolve, reject) => {\n\n      const tbl = IndexedDBConstants.FT_PROPERTIES_TABLE_NAME;\n      const index = IndexedDBConstants.FT_PROPERTIES_TABLE_INDEX_KEY;\n\n      _self.indexedDBService.deleteEntries(tbl, index, key, function (err, count) {\n\n        if (count === 0) {\n          logger.info('No entry to remove for key: ' + key);\n        }\n\n        resolve(true);\n      });\n\n    });\n\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class FormColorService {\n\n  color$: Observable<any>;\n  private colorSubject: Subject<any>;\n\n  constructor() {\n    this.colorSubject = new Subject<any>();\n    this.color$ = this.colorSubject.asObservable();\n  }\n\n  static COLOR_WHITE = '#ffffff';\n\n  color = {\n    background: '',\n    backgroundDark: '',\n  };\n\n  updateBackground() {\n    let backgroundColor = this.color.background;\n    if (localStorage.getItem('theme') === 'dark') {\n      backgroundColor = this.color.backgroundDark;\n    }\n\n    this.colorSubject.next({ background: backgroundColor });\n  }\n\n  setColor(formColor) {\n    this.color.background = formColor;\n    this.updateBackground();\n  }\n\n  setColorDark(formColorDark) {\n    this.color.backgroundDark = formColorDark;\n    this.updateBackground();\n  }\n  \n  setBackgroundColor() {\n    this.setColor(FormColorService.COLOR_WHITE);\n  }\n\n}\n","import { Injectable, inject } from '@angular/core';\nimport { LocalStorageService } from '../storage/local-storage/local-storage.service';\nimport { LocalStorageKeys } from '../../constants/LocalStorageKeys';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ModifiedCSSService {\n  private localStorageService = inject(LocalStorageService);\n\n\n  dynamicCSSObj = {\n    commandBarCSS: null\n  };\n\n  setCommandBarCSS(templateId, commandBarCSS){\n    this.dynamicCSSObj.commandBarCSS = commandBarCSS;\n\n    const fromStorage = this.localStorageService.getItem(LocalStorageKeys.COMMAND_BAR_CSS);\n    const entry = fromStorage ? JSON.parse(fromStorage) : {};\n\n    entry[templateId] = commandBarCSS;\n\n    this.localStorageService.setItem('commandBarCSS', JSON.stringify(entry));\n  }\n\n  getStoredCommandBarCSS(templateId) {\n    const fromStorage = this.localStorageService.getItem(LocalStorageKeys.COMMAND_BAR_CSS);\n    const entry = fromStorage ? JSON.parse(fromStorage) : {};\n\n    return entry[templateId];\n  }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { User } from '@formbird/types';\nimport { Observable } from 'rxjs';\nimport { LoggedInUserService } from '../user/logged-in-user.service';\nimport { ConfigService } from '../config/config.service';\nimport { select } from '../../redux/decorators/select';\n\nconst logger = console;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DefaultStateService {\n  private loggedInUserService = inject(LoggedInUserService);\n  private router = inject(Router);\n  private configService = inject(ConfigService);\n\n\n  @select(['userState', 'user']) user$: Observable<User>;\n  user: User;\n\n  constructor() {\n    this.user$.subscribe((user: User) => this.user = user);\n  }\n\n  isPathAccountDefault() {\n    let userBean;\n    if (this.user) {\n      userBean = this.user.account;\n    }\n\n    const pathArray = this.router.url.split('/');\n    return userBean && userBean.defaultURL === pathArray[2];\n  }\n\n  changeToDefaultState(nextState?, userBean?) {\n    logger.info('Changing to default URL');\n\n    const defaultURL = this.configService.clientConfig().defaultURL;\n    const user = this.user.account;\n\n    let publicAccount = false;\n    let accountPublicURL;\n\n    if (user && user.publicAccount) {\n      publicAccount = true;\n      accountPublicURL = user.accountPublicURL;\n    }\n\n    if (!userBean) {\n      userBean = this.user.account;\n    }\n\n    let id = '';\n    if (defaultURL && defaultURL !== '') {\n      id = defaultURL;\n    }\n\n    if (userBean && userBean.defaultURL && userBean.defaultURL !== '') {\n      id = userBean.defaultURL;\n    }\n\n    if (nextState) {\n      if (id && id !== '') {\n        const locationParams: any = {};\n        if (publicAccount) {\n          locationParams.replaceUrl = false;\n        }\n\n        this.router.navigate([nextState, id], locationParams);\n      } else if (nextState === '/form' && userBean) {\n        this.router.navigate(['/notFound'], {replaceUrl: false});\n      } else {\n        this.router.navigate([nextState]);\n      }\n    } else {\n      if (publicAccount) {\n        this.router.navigate([`/${accountPublicURL}`, 'form', id]);\n      } else if (id !== '') {\n        this.router.navigate(['/form', id]);\n      } else {\n        this.router.navigate(['/form']);\n      }\n    }\n  }\n\n}\n","import { Injectable, OnInit, OnDestroy, inject } from '@angular/core';\nimport { Subscription, Observable, Subject } from 'rxjs';\nimport { DefaultStateService } from './default-state.service';\nimport { User } from '@formbird/types';\nimport { LoggedInUserService } from '../user/logged-in-user.service';\nimport { select } from '../../redux/decorators/select';\n\nexport interface NavMenu {\n  template: string;\n  user: any;\n  sideMenuOpen: boolean;\n}\n\nexport interface NavImage {\n  homeButtonImage: any;\n  homeButtonImages: any[];\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class NavigationService implements OnInit, OnDestroy {\n  private loggedInUserService = inject(LoggedInUserService);\n  private defaultStateService = inject(DefaultStateService);\n\n\n  @select(['userState', 'user']) user$: Observable<User>;\n  user: User;\n\n  private menus: NavMenu;\n  private menusSubject: Subject<NavMenu>;\n  menus$: Observable<NavMenu>;\n\n  private images: NavImage;\n  private imagesSubject: Subject<NavImage>;\n  images$: Observable<NavImage>;\n\n  subs: Subscription = new Subscription();\n\n  constructor() {\n    this.menusSubject = new Subject<NavMenu>();\n    this.menus$ = this.menusSubject.asObservable();\n\n    this.imagesSubject = new Subject<NavImage>();\n    this.images$ = this.imagesSubject.asObservable();\n\n    this.reset();\n\n    const sub = this.user$.subscribe((user: User) => this.user = user);\n    this.subs.add(sub);\n  }\n\n  ngOnInit() {\n  }\n\n  ngOnDestroy() {\n    this.subs.unsubscribe();\n  }\n\n  reset() {\n    this.menus = {\n      template: null,\n      user: null,\n      sideMenuOpen: false\n    };\n\n    this.images = {\n      homeButtonImage: null,\n      homeButtonImages: null\n    };\n\n    this.menusSubject.next(this.menus);\n    this.imagesSubject.next(this.images);\n  }\n\n  setCurrentTemplate(template) {\n    if (template) {\n\n      // setting home Button Image\n      if (template.homeButtonImage) {\n        this.images.homeButtonImage = template.homeButtonImage;\n      }\n\n      if (template.homeButtonImages) {\n        this.images.homeButtonImages = template.homeButtonImages;\n      }\n\n      // setting menu\n      this.menus.user = this.user.menu;\n\n      // assign template menu if default path regardless of undefined or not\n      if (template.menu || this.defaultStateService.isPathAccountDefault()) {\n        this.menus.template = template.menu;\n      }\n\n      this.menusSubject.next(this.menus);\n      this.imagesSubject.next(this.images);\n    }\n  }\n}\n","\nexport class UtilWebWorker {\n\n  public static initWebWorker(file, options?) {\n    return new Promise(async (resolve, reject) => {\n      const webWorker = new Worker(file, options);\n      await new Promise(resolve => setTimeout(resolve, 3000));\n      resolve(webWorker)\n    });\n  }\n\n\n}\n","/* eslint-disable no-console */\nimport { SharedUrlRoutes } from '@formbird/shared';\nimport { LocalStorageKeys } from '../../constants/LocalStorageKeys';\nimport { UrlBasePathUtil } from '../../utils/UrlBasePathUtil';\n\nasync function getServerVersion(): Promise<string> {\n     try {\n        const accountDocumentId = localStorage.getItem('LoggedInUserID');\n        if (accountDocumentId) {            \n            const operateOnline =  JSON.parse(localStorage.getItem(accountDocumentId))?.operateOnline;   \n            if (operateOnline === false){\n            throw new Error(\"System is offline mode.\");\n            } \n        }\n\n        const resp = await fetch(SharedUrlRoutes.serverRoutes.appVersion);\n        const json = await resp.json();\n        return json.version;\n     } catch (error) {\n        throw error; \n    }\n}\n\nexport class VersionService {\n    static compareVersions(version1: string, version2: string): number {\n        const parseVersion = (version) => {\n            const [numPart, tagPart] = version.split('-');\n            const numbers = numPart.split('.').map(Number);\n            const tagNumbers = tagPart ? tagPart.split('.').map(Number) : [];\n            return { numbers, tagNumbers, hasTag: !!tagPart };\n        };\n\n        const v1 = parseVersion(version1);\n        const v2 = parseVersion(version2);\n\n        for (let i = 0; i < Math.max(v1.numbers.length, v2.numbers.length); i++) {\n            if ((v1.numbers[i] || 0) < (v2.numbers[i] || 0)) return -1;\n            if ((v1.numbers[i] || 0) > (v2.numbers[i] || 0)) return 1;\n        }\n\n        if (v1.hasTag && !v2.hasTag) return -1;\n        if (!v1.hasTag && v2.hasTag) return 1;\n\n        for (let i = 0; i < Math.max(v1.tagNumbers.length, v2.tagNumbers.length); i++) {\n            if ((v1.tagNumbers[i] || 0) < (v2.tagNumbers[i] || 0)) return -1;\n            if ((v1.tagNumbers[i] || 0) > (v2.tagNumbers[i] || 0)) return 1;\n        }\n\n        return 0;\n    }\n\n    // Checks for breaking API changes in the serviceWorker configuration\n    static hasBreakingApiChanges(): boolean {\n        const { serviceWorker } = globalThis.ftClientConfig || {};\n        return serviceWorker?.breakingApiChanges === true;\n    }\n\n    // Determines if an update is necessary based on the current app version\n    static needsUpdate(appVersion: string): boolean {\n        const { serviceWorker } = globalThis.ftClientConfig || {};\n\n        return this.hasBreakingApiChanges()\n            && serviceWorker?.minPreviousVersion\n            && this.compareVersions(serviceWorker.minPreviousVersion, appVersion) === -1;\n    }\n\n    static async checkServerVersion() {\n        try {\n            console.log('Checking server version.');\n            // needs to be inlined here from localStorageService because this is not an angular service\n            const appVersion = localStorage.getItem(UrlBasePathUtil.basePath + LocalStorageKeys.APP_VERSION);\n            const serverAppVersion = await getServerVersion();\n            if (appVersion && appVersion !== serverAppVersion) {\n                if ('serviceWorker' in navigator) { // invalidate service worker\n                    try {\n                        const registrations = await navigator.serviceWorker.getRegistrations();\n                        for (let registration of registrations) {\n                            await registration.unregister();\n                        }\n                        console.log(\"Service worker unregistered.\");\n\n                        if (this.needsUpdate(serverAppVersion)) {\n                            console.log(\"Reloading...\");\n                            window.location.reload();\n                        }\n                    } catch (err) {\n                        console.error('Error during service worker unregister:', err);\n                    }\n                }\n            }\n        } catch (err) {\n            console.error(\"Unable to retrieve server version: \" + err.message);\n        }\n        return true;\n    }\n}\n","import { ConfigService } from '../config/config.service';\nimport { DataService } from '../data/data.service';\nimport { DocumentUpdateService } from '../document/document-update.service';\nimport { OfflineStatusService } from '../offline-status/offline-status.service';\nimport { RestDataService } from '../data/rest-data.service';\nimport { UnsavedDocumentService } from '../document/unsaved-document.service';\nimport { UrlBasePathUtil } from '../../utils/UrlBasePathUtil';\nimport { SharedConstants } from '@formbird/types';\nimport { Injectable, inject } from '@angular/core';\nimport * as io from 'socket.io-client';\nimport { VersionService } from '../version/version.service';\nimport { ClientAccessService } from '../access/client-access.service';\nimport { LoggedInUserService } from '../user/logged-in-user.service';\nimport { ClientConstants } from '../../constants/ClientConstants';\n\nconst logger = console;\n\nconst urlBasePath = UrlBasePathUtil.basePathWithSlashPrefix;\nconst path = { path: 'socket.io' };\n\nconst WEB_SOCKET_RECONNECT_TIME = 1000;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class WebSocketService {\n  private offlineStatusService = inject(OfflineStatusService);\n  private unsavedDocumentService = inject(UnsavedDocumentService);\n  private dataService = inject(DataService);\n  private restDataService = inject(RestDataService);\n  private documentUpdateService = inject(DocumentUpdateService);\n  private configService = inject(ConfigService);\n  private clientAccessService = inject(ClientAccessService);\n  private loggedInUserService = inject(LoggedInUserService);\n\n\n  private socket;\n\n  private getTransports() {\n    if (this.configService.clientConfig().socketIO && this.configService.clientConfig().socketIO.transports) {\n      return this.configService.clientConfig().socketIO.transports;\n    }\n    return null;\n  }\n\n  /**\n   * cache any documents saved while offline. This can either be when the browser was closed or the device was offline\n   */\n  private loadDocumentsSavedWhileOffline() {\n\n    const _self = this;\n\n    logger.info('Device has come online or app has been started. Loading any data saved while offline');\n\n    const isCacheEnabled = _self.offlineStatusService.isCachingEnabled();\n    const isCacheLoading = _self.offlineStatusService.isCacheLoading();\n    const isDataCacheCompleted = _self.offlineStatusService.isDataCachingCompleted();\n    if (!isCacheEnabled || (isCacheEnabled && isCacheLoading && !isDataCacheCompleted)) {\n      //Should not load and update any data cache\n      //if the initial data caching process has not completed yet or caching is not enabled\n      return;\n    }\n\n    const promise: Promise<any> = _self.dataService.loadDataCache(false);\n\n    promise.then(updateCachedDocuments);\n\n    async function updateCachedDocuments(newDocuments) {\n\n      if (newDocuments) {\n        for (let i = 0; i < newDocuments.length; i++) {\n          let newDocument = newDocuments[i];\n          await _self.documentUpdateService.updateVersions([newDocument]);\n        }\n      }\n\n      return newDocuments;\n    }\n  }\n\n  start() {\n\n    if (this.socket){\n        return;\n    }\n    \n    logger.info('Starting websocket...');\n\n    const _self = this;\n\n    const options = {\n      resource: path,\n      path: null,\n      transports: [\"websocket\"]\n    };\n\n    const transports = _self.getTransports();\n    if (transports) {\n      options.transports = transports;\n    }\n\n    options.path = urlBasePath + '/socket.io';\n    _self.socket = io.connect('/', options);\n\n    function startReconnect() {\n      if (!_self.socket.connected) {\n        setTimeout(doReconnect, WEB_SOCKET_RECONNECT_TIME);\n      }\n    }\n\n    function doReconnect() {\n      if (!_self.socket.connected) {\n        startReconnect();\n        _self.socket.connect();\n      }\n    }\n\n    _self.socket.on(SharedConstants.WEB_SOCKET_MESSAGE_SAVE_DOCUMENT, function (docInfo) {\n\n      const documentId = docInfo?.documentId;\n      const loggedUserId = _self.loggedInUserService.getUserId();\n\n      // Ensure that if the current user's account document is updated, the components\n      // depending on LoggedInUserService are informed. Ex. The Home button\n      const isUserProfileDocument = documentId === loggedUserId;\n\n      if ((_self.offlineStatusService.isCachingEnabled()\n        || _self.unsavedDocumentService.documentIsLoaded(documentId)\n        || isUserProfileDocument) && _self.offlineStatusService.shouldOperateOnline()\n      ) {\n\n        return _self.restDataService.loadVersions(docInfo.versionIds).then(async function successFunc(versions) {\n\n          await _self.documentUpdateService.updateVersions(versions);\n\n          const isCacheEnabled = _self.offlineStatusService.isCachingEnabled();\n          const isCacheLoading = _self.offlineStatusService.isCacheLoading();\n          const isDataCacheCompleted = _self.offlineStatusService.isDataCachingCompleted();\n          const isRunningCacheClear =_self.loggedInUserService.getUserConfigItem('isRunningCacheClear');\n          if (isCacheEnabled && !isCacheLoading && isDataCacheCompleted && !isRunningCacheClear) {\n\n            const hasOfflineAccess = _self.clientAccessService.checkAccess(docInfo, SharedConstants.OPERATION_TYPE_OFFLINE);\n            if (hasOfflineAccess) {\n              _self.offlineStatusService.addToMaxCacheCount(1);\n            }\n\n            // pass versions in. If it was not fetched already\n            _self.dataService.cacheDocument(docInfo, versions).then(\n              function successFunc(versions) {\n                logger.info(\"Cached pushed document for offline use: \" + documentId);\n              },\n              function errorFunc(err) {\n                logger.info(\"Not found document from received pushed versions: \" + documentId, err);\n              }\n            );\n          }\n        }, function errorFunc(err) {\n          logger.error(\"Error loading pushed document: \" + err.message);\n        });\n      }\n    });\n\n    _self.socket?.on('reconnect', function (attempt) {\n      _self.loadDocumentsSavedWhileOffline();\n    });\n\n    _self.socket?.on('connect', async () => {\n      logger.info('Connected to notification socket. Setting status to connected.');\n\n      const connectedToServer = await _self.offlineStatusService.checkServerConnectionStatus();\n      if (connectedToServer) {\n        _self.offlineStatusService.setConnected();\n        _self.loadDocumentsSavedWhileOffline();\n        VersionService.checkServerVersion();\n        _self.documentUpdateService.checkDocumentsCreated();\n         _self.emit(ClientConstants.WEB_SOCKET_STATUS, true);\n      }\n    });\n\n    _self.socket?.on('connect_error', function (data) {\n\n      logger.info('Error in notification socket. Setting status to disconnected');\n\n      _self.offlineStatusService.setDisconnected();\n      // _self.utilService.scopeApply(_self.$rootScope);\n\n    });\n\n    _self.socket?.on('disconnect', function (data) {\n\n      logger.info('Disconnected from notification socket. Setting status to disconnected');\n\n      _self.offlineStatusService.setDisconnected();\n\n      startReconnect();\n\n    });\n\n    _self.socket?.on(SharedConstants.WEB_SOCKET_MESSAGE_PASSWORD_RESET, function (userId) {\n      _self.emit( SharedConstants.PASSWORD_RESET, userId);\n    });\n  }\n\n  /**\n   * end the websocket session\n   */\n  end() {\n    // disconnect from the socket. No callback is fired on doing this. A disconnect event is fired but only if the socket is\n    // currently connected\n\n    if (this.socket) {\n      this.socket.disconnect();\n    }\n\n  }\n\n  emit(eventName, data) {\n    this.socket?.emit(eventName, data);\n  }\n\n  addEventListener(eventName, eventHandlerFunc) {\n    this.socket?.on(eventName, eventHandlerFunc);\n  }\n\n  removeEventListener(eventName) {\n    this.socket?.off(eventName);\n  }\n}\n","import { UtilDocumentId } from '@formbird/shared';\nimport { Injectable, inject } from '@angular/core';\nimport { OfflineStatusService } from '../offline-status/offline-status.service';\nimport { WebWorkerMessageType } from '../offline/offline-web-worker-message.type';\nimport { ConfigService } from '../config/config.service';\nimport { ClientConstants } from '../../constants/ClientConstants';\nimport { BroadcastService } from '../broadcast/broadcast.service';\nimport { UtilWebWorker } from '../../utils/UtilWebWorker';\nimport { NotificationService } from '../notification/notification.service';\nimport { LoggedInUserService } from '../user/logged-in-user.service';\nimport { IndexedDBService } from '../indexeddb/indexed-db.service';\nimport { RestDataService } from '../data/rest-data.service';\nimport { CurrentDocumentService } from '../document/current-document.service';\nimport { WebSocketService } from '../socket/web-socket.service';\n\nconst logger = console;\n@Injectable({\n  providedIn: 'root'\n})\nexport class OfflineUtilService {\n  private offlineStatusService = inject(OfflineStatusService);\n  private broadcastService = inject(BroadcastService);\n  private configService = inject(ConfigService);\n  private notificationService = inject(NotificationService);\n  private loggedInUserService = inject(LoggedInUserService);\n  private indexedDBService = inject(IndexedDBService);\n  private restDataService = inject(RestDataService);\n  private webSocketService = inject(WebSocketService);\n\n  private isPendingPreviousSync = false;\n\n  constructor() {}\n\n  getNextId(url?) {\n    return UtilDocumentId.generateId();\n  }\n\n  async startOfflinePoller() {\n    const _self = this;\n\n    let offlinePollerWorker: any;\n\n    const processPoller = () => {\n\n      console.debug('...Processing poller');\n\n      const pollerOptions: any = {};\n      pollerOptions.offlinePollerStart = true;\n      pollerOptions.unsyncedRecordCheckTime = this.configService.clientConfig().unsyncedRecordCheckTime;\n\n      setTimeout(function () {\n        offlinePollerWorker.postMessage(pollerOptions);\n      }, 5000);\n\n      _self.broadcastService.on(ClientConstants.CHECK_UNSYNCED_DOCUMENTS).subscribe((data: any) => {\n        if (!_self.isPendingPreviousSync || data?.operateOnline) {\n          pollerOptions.checkUnsyncedDocuments = true;\n          offlinePollerWorker.postMessage(pollerOptions);\n          _self.isPendingPreviousSync = true;\n        }\n      });\n    \n      _self.webSocketService.addEventListener(ClientConstants.WEB_SOCKET_STATUS, ( connected) => {\n          pollerOptions.checkUnsyncedDocuments = true;\n          offlinePollerWorker.postMessage(pollerOptions);          \n      });\n\n      offlinePollerWorker.onmessage = onMessage;\n      async function onMessage({ data }) {\n        if (data?.messageType === WebWorkerMessageType.PEINDING_DOCUMENT_COUNT) {\n          _self.offlineStatusService.setPendingDocumentCount(data.value);\n        } else if (data?.messageType === WebWorkerMessageType.PENDING_UPLOAD_COUNT) {\n          if (data.value === -1) {\n            _self.offlineStatusService.decPendingUploadCount();\n          } else {\n            _self.offlineStatusService.setPendingUploadCount(data.value);\n          }\n        } else if (data?.messageType === WebWorkerMessageType.PREVIOUS_SYNC_STATUS) {\n          if (data?.value === 'completed') {\n            _self.isPendingPreviousSync = false;\n          } else {\n            _self.notificationService.error(data?.value);\n            _self.offlineStatusService.offlineStatus.errorOfflineChangesSyncDocs.push(data?.value);\n            _self.loggedInUserService.setUserConfigItem('ErrorOfflineChangesSyncDocs',\n              _self.offlineStatusService.offlineStatus.errorOfflineChangesSyncDocs);\n          }\n        } else if (data?.messageType === WebWorkerMessageType.PRINT_MESSAGE) {\n          const args = data.value;\n          _self.notificationService.printMessage(args.message, args.options, args.title, args.position,\n            args.preventDuplicate, args.displayDesktopNotification, args.onClickFunction,\n            args.timeOut, args.isPermanent, args.customClassName);\n        } else if (data?.messageType === WebWorkerMessageType.GATEWAY_ERROR) {\n          _self.offlineStatusService.offlineStatus.errorOfflineChangesSyncDocs.push(data?.value);\n          _self.loggedInUserService.setUserConfigItem('ErrorOfflineChangesSyncDocs',\n            _self.offlineStatusService.offlineStatus.errorOfflineChangesSyncDocs);\n        } else if (data?.messageType === WebWorkerMessageType.FATAL_ERROR) {\n          const args = data?.value;\n\n          if (args?.offline?.type === \"PUT\") {\n            //10190 note id 97106 if the save is an update to a document that already existed on the server that the current version is reset\n            //back to what the current version is on the server\n            _self.indexedDBService.documentReset(args?.documentId);\n            const document = await _self.restDataService.getDocument(args?.documentId);\n            await _self.indexedDBService.doCacheDocument(document, null);\n          }\n        }\n      }\n    };\n\n    const userAgent = navigator.userAgent\n    const offlineConfig: any = this.configService.clientConfig().offline;\n    \n    const isAndroidChrome = /android/i.test(userAgent) && /chrome/i.test(userAgent);\n    const allowSharedWorkers = offlineConfig?.android?.enableSharedWorkers === true;\n    const hasSharedWorkerSupport = typeof SharedWorker !== \"undefined\";\n\n    if  (!hasSharedWorkerSupport || (isAndroidChrome && !allowSharedWorkers)) {\n      // Use Web Locks API to ensure a single worker instance\n      const lockName = 'offline-poller';\n      const lockAcquired = await navigator.locks.request(lockName, { ifAvailable: true }, async (lock) => {\n        if (!lock) {\n          console.log('Another tab owns the poller');\n          if (offlinePollerWorker){\n            return false;\n          }\n          \n        }\n        console.log('Lock acquired. Initializing Web Worker for OfflinePoller.js.');\n        offlinePollerWorker = await UtilWebWorker.initWebWorker('OfflinePoller.js');\n\n        processPoller();\n\n        // Keep the lock active until the tab is closed\n        window.addEventListener('beforeunload', () => {\n          console.log('Tab is closing. Releasing the lock and terminating the worker.');\n          offlinePollerWorker.terminate();\n        });\n\n        await new Promise(() => {\n          console.log('Lock is persistently held until the tab is closed.');\n        });\n\n        return true; // This line is never actually reached, but ensures structure.\n      });\n\n      if (!lockAcquired) {\n        console.log('Worker is already running in another tab.');\n      }\n    } else {\n      \n      console.debug('...Starting offline poller in offline util service');\n\n      offlinePollerWorker = await new SharedWorker('OfflinePoller.js').port;\n      offlinePollerWorker.start();\n\n      processPoller();\n    }\n  }\n\n}\n","import {Injectable} from '@angular/core';\nimport { isArray, isObject, includes } from 'lodash';\n\n\nconst operator = {\n    equals: 'eq',\n    notEquals: 'neq',\n    contains: 'contains'\n  };\n\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class SearchQueriesService {\n\n  constructor() {  }\n\n  getElasticQuery(scope, filter, search, columns, order, dtcolumns) {\n\n    let filterObj = filter;\n\n    if (typeof filter === 'string') {\n      filterObj = filter.replace(/'/g, '\"');\n      // filterObj = filterObj.replace(/ /g, \"\\\\\\\\ \");\n      filterObj = JSON.parse(filterObj);\n    }\n\n    if (filterObj.query.bool.should === undefined) {\n      filterObj.query.bool.should = [];\n    }\n    if (filterObj.query.bool.must === undefined) {\n      filterObj.query.bool.must = [];\n    }\n\n    let indexSBoxFilter = -1;\n    const arr = filterObj.query.bool.must;\n    for (let i = 0; i < arr.length; i++) {\n      if (typeof arr[i].query_string !== 'undefined') {\n        if (typeof arr[i].query_string.allow_leading_wildcard !== 'undefined') {\n          indexSBoxFilter = i;\n          break;\n        }\n      }\n    }\n    if (indexSBoxFilter !== -1) {\n      filterObj.query.bool.must.splice(indexSBoxFilter, 1);\n    }\n\n    if (search.value) {\n      let searchTerm = search.value.trim();\n      if( !scope.searchBoxAnyCase ){\n        searchTerm = search.value.toLowerCase().trim();\n      }\n\n      // eslint-disable-next-line max-len\n      let sBoxFilter = `{'query_string':{'query': '*{{{search}}}*','analyze_wildcard':true, 'allow_leading_wildcard': true, default_operator: 'AND', 'analyzer: 'formbird_text_search'}}`;\n      // 17334\n      if( scope.componentDefinition.searchBoxFilter ){\n        sBoxFilter = scope.componentDefinition.searchBoxFilter;\n      }\n      // end 17334\n      const sBoxFilterStr = sBoxFilter.replace('{{{search}}}', searchTerm.replace(/\\//g, '//')).replace(/'/g, '\"');\n      const sBoxFilterObj = JSON.parse(sBoxFilterStr);\n\n      const excludeTypes = ['date', 'boolean', 'number', 'object'];\n      const excludeFilters = ['dateFilter', 'numericFilter'];\n\n      const systemTextSearch = ['systemHeader.summaryName', 'systemHeader.summaryDescription', 'appTags'];\n      let hasSystemSearch = false;\n\n      // Assign Default Fields if no fields set in the sBox filter\n      if (!sBoxFilterObj.query_string.fields) {\n        const fields = [];\n        dtcolumns.map((col) => {\n          if( !includes(excludeTypes, col.type) && !includes(excludeFilters, col.filter)){\n            let fieldName = col.data;\n            if ( !scope.searchBoxAnyCase && !systemTextSearch.includes(col.data) ){\n              fieldName = col.data + '.lcase';\n            }\n\n            if ( systemTextSearch.includes(col.data) ){\n              hasSystemSearch = true;\n            }else{\n            fields.push(fieldName);\n          }\n\n          }\n        });\n\n        if( hasSystemSearch ){\n          fields.push('system_text_search');\n        }\n\n        sBoxFilterObj.query_string.fields = fields;\n      }\n      // column\n      filterObj.query.bool.must.push(sBoxFilterObj);\n\n    }\n\n    for (let i = 0; i < columns.length; i++) {\n\n      const s = columns[i];\n      let fieldTerm = s.name;\n      if (fieldTerm.match(/\\.\\d+\\./g)) {\n        fieldTerm = fieldTerm.replace(/\\.\\d+\\./g, '.');\n      }\n\n      let indexCBoxFilter = -1;\n      const arr = filterObj.query.bool.must;\n      for (let j = 0; j < arr.length; j++) {\n        if (typeof arr[j].wildcard !== 'undefined') {\n          if (typeof arr[j].wildcard[fieldTerm + '.lcase'] !== 'undefined') {\n            if (typeof arr[j].wildcard[fieldTerm + '.lcase'].value !== 'undefined') {\n              indexCBoxFilter = j;\n              break;\n            }\n          }\n        }\n      }\n      if (indexCBoxFilter !== -1) {\n        filterObj.query.bool.must.splice(indexCBoxFilter, 1);\n      }\n\n      if (s.search.value) {\n        switch (dtcolumns[i].type) {\n          default:\n            const wc = {};\n            wc[fieldTerm + '.lcase'] = {value: '*' + s.search.value.replace(/\\//g, '//').toLowerCase() + '*'};\n            filterObj.query.bool.must.push({wildcard: wc});\n            break;\n        }\n      }\n    }\n\n    // Secure the sort object to be empty, avoid adding duplicate sort fields\n    if (filterObj.sort === undefined || filterObj.sort.length > 0) {\n      filterObj.sort = [];\n    }\n\n    order.forEach((val, i) => {\n      if (val.dir !== '') {\n        const sortObj = {};\n        sortObj[scope.componentDefinition.gridColumns[val.column].field.replace(/\\.\\d+/g, '')] = val.dir;\n        filterObj.sort.push(sortObj);\n      }\n    });\n\n    return filterObj;\n\n  }\n\n  getMongoQuery(scope, filter, search, columns, order, dtcolumns) {\n\n    let filterObj;\n    let queryData;\n    if (typeof filter === 'string') {\n      filterObj = filter.replace(/'/g, '\"');\n      filterObj = JSON.parse(filterObj);\n    } else {\n      filterObj = filter;\n    }\n    queryData = filterObj.query ? filterObj.query : filterObj;\n\n    if (search.value) {\n      const andArray = queryData.$and;\n      const regexObj = {$regex: search.value.replace(/\\//g, '//').replace(/'/g, '\"').toLowerCase(), $options: 'i'};\n      if (andArray === undefined || !isArray(andArray)) {\n        queryData['systemHeader.summaryName'] = regexObj;\n      } else {\n        queryData.$and.push({'systemHeader.summaryName': regexObj});\n      }\n\n    }\n\n    for (let i = 0; i < columns.length; i++) {\n      const s = columns[i];\n      let fieldTerm = s.name;\n      if (fieldTerm.match(/\\.\\d+\\./g)) {\n        fieldTerm = fieldTerm.replace(/\\.\\d+\\./g, '.');\n      }\n\n      if (s.search.value) {\n        switch (dtcolumns[i].type) {\n          default:\n            const andArray = filterObj.$and;\n            const regexObj = {$regex: s.search.value.replace(/\\//g, '//').toLowerCase().toLowerCase(), $options: 'i'};\n            if (andArray === undefined || !isArray(andArray)) {\n              queryData[fieldTerm] = regexObj;\n            } else {\n              const fldObj = {};\n              fldObj[fieldTerm] = regexObj;\n              queryData.$and.push(fldObj);\n            }\n            break;\n        }\n      }\n    }\n\n    if (filterObj.query) {\n      filterObj.query = queryData;\n    } else {\n      filterObj = {query: queryData};\n    }\n    // Secure the sort object to be empty, avoid adding duplicate sort fields\n    if (filterObj.sort === undefined || !isObject(filterObj.sort)) {\n      filterObj.sort = {};\n    }\n\n\n    order.forEach((val, i) => {\n      if (val.dir !== '') {\n        filterObj.sort[scope.componentDefinition.gridColumns[val.column].field.replace(/\\.\\d+/g, '')] = val.dir === 'asc' ? 1 : -1;\n      }\n    });\n\n\n    return filterObj;\n\n  }\n\n  getDexieQuery(scope, filter, search, columns, order, dtcolumns) {\n\n    let filterObj;\n    filterObj = {dexieQuery: []} ;\n\n    if (search.value) {\n      filterObj.dexieQuery.push({ field : 'systemHeader.summaryName',\n        value: search.value.replace(/\\//g, '//').replace(/'/g, '\"').toLowerCase(),\n        operator: operator.contains });\n    }\n\n    for (let i = 0; i < columns.length; i++) {\n      const s = columns[i];\n      let fieldTerm = s.name;\n      if (fieldTerm.match(/\\.\\d+\\./g)) {\n        fieldTerm = fieldTerm.replace(/\\.\\d+\\./g, '.');\n      }\n\n      if (s.search.value) {\n        switch (dtcolumns[i].type) {\n          default:\n            const fldObj = {field: fieldTerm, value: s.search.value.replace(/\\//g, '//').toLowerCase(),\n              operator: operator.contains };\n            filterObj.dexieQuery.push(fldObj);\n            break;\n        }\n      }\n    }\n\n    // Secure the sort object to be empty, avoid adding duplicate sort fields\n    if (filterObj.dexieSort === undefined || !isObject(filterObj.dexieSort)) {\n      filterObj.dexieSort = {};\n    }\n\n    order.forEach((val, i) => {\n      if (val.dir !== '') {\n        filterObj.dexieSort[scope.componentDefinition.gridColumns[val.column].field] = val.dir;\n      }\n    });\n\n    return filterObj;\n\n  }\n\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DatatablesQueriesService extends SearchQueriesService {}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { SharedUrlRoutes } from '@formbird/shared';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ClientResourceService {\n  private http = inject(HttpClient);\n\n\n  getClientResources() {\n\n    return this.http.get(SharedUrlRoutes.serverRoutes.clientResources).toPromise();\n  }\n\n  getCachedFilesCount() {\n\n    return Promise.resolve(0);\n\n    // Will be checked later because caches object is undefined\n    // return new Promise((resolve, reject) => {\n    //   if (caches) {\n    //     caches.keys().then(keyList => {\n    //\n    //       const promises = [];\n    //       for (let i = 0; i < keyList.length - 1; i++) {\n    //         const key = keyList[i];\n    //         promises.push(caches.open(key));\n    //       }\n    //\n    //       return Promise.all(promises);\n    //\n    //     }).then(returnedCaches => {\n    //       const promises = [];\n    //       for (let i = 0; i < returnedCaches.length; i++) {\n    //         const cache = returnedCaches[i];\n    //         promises.push(cache.keys());\n    //       }\n    //\n    //       return Promise.all(promises);\n    //\n    //     }).then((cachedFilesArray) => {\n    //       let totalCount = 0;\n    //       for (let i = 0; i < cachedFilesArray.length; i++) {\n    //         totalCount += cachedFilesArray[i].length;\n    //       }\n    //\n    //       resolve(totalCount);\n    //     });\n    //   } else {\n    //     resolve(0);\n    //   }\n    // });\n  }\n}\n","import { Injectable } from '@angular/core';\ndeclare const angular: any;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class FormbirdInjectorService {\n  injector: any;\n\n  constructor() {\n    // get the injector. If running with an AngularJS core the injector will be the AngularJS injector. If running with an\n    // Angular core, the injector is exposed globally in a window.FormbirdServiceInjector object. Once we have moved all customers\n    // to an Angular core, we can remove the searching for an AngularJS injector\n\n    // first try getting the global formbird service injector which will be defined if running with an Angular only core\n    this.injector = (window as any).FormbirdServiceInjector;\n\n  }\n\n  get(serviceName: string) {\n    // first try getting the global formbird service injector which will be defined if running with an Angular only core\n    return this.injector.get(serviceName);\n  }\n\n}\n","import { Injectable, inject } from '@angular/core';\nimport {FormbirdInjectorService} from '../injector/formbird-injector.service';\nimport {ActivatedRouteSnapshot} from '@angular/router';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class RouterService {\n  private injector = inject(FormbirdInjectorService);\n\n  private service: any;\n\n  constructor() {\n    const injector = this.injector;\n\n    this.service = injector.get('RouterService');\n  }\n  getActivatedRouteSnapshot(): ActivatedRouteSnapshot {\n    return this.service.getActivatedRouteSnapshot()\n  }\n\n  navigate(params: any[]): Promise<boolean> {\n    return this.service.navigate(params)\n  }\n\n  navigateByUrl(url: string, target?: string) {\n    return this.service.navigateByUrl(url, target)\n  }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { ClientConstants } from '../../constants/ClientConstants';\nimport { LocalStorageService } from '../storage/local-storage/local-storage.service';\n\nexport interface SearchFilter {\n  filter: boolean;\n  queryToBeFiltered: string;\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class SearchFilterService {\n  private localStorageService = inject(LocalStorageService);\n\n\n  private searchFilter: SearchFilter;\n  private searchFilterSubject: Subject<SearchFilter>;\n  searchFilter$: Observable<SearchFilter>;\n\n  constructor() {\n    this.searchFilter = {\n      filter: false,\n      queryToBeFiltered: null\n    };\n\n    this.searchFilterSubject = new Subject<SearchFilter>();\n    this.searchFilter$ = this.searchFilterSubject.asObservable();\n  }\n\n  setQueryToBeFiltered(query) {\n    this.localStorageService.setItem(ClientConstants.FILTERED_QUERY, query);\n    this.localStorageService.setItem(ClientConstants.FILTER, 'true');\n\n    this.searchFilter.filter = true;\n    this.searchFilter.queryToBeFiltered = query;\n\n    this.searchFilterSubject.next(this.searchFilter);\n  }\n\n  removeFilter() {\n    this.searchFilter.filter = false;\n    this.searchFilter.queryToBeFiltered = null;\n\n    this.localStorageService.removeItem(ClientConstants.FILTER);\n    this.localStorageService.removeItem(ClientConstants.FILTERED_QUERY);\n\n    this.searchFilterSubject.next(this.searchFilter);\n  }\n}\n","import { SynchronousStorageService } from '../SynchronousStorageService';\n\nexport class SessionStorageService extends SynchronousStorageService {\n  protected storage: Storage = sessionStorage;\n\n  constructor() {\n    super()\n  }\n}\n","import { SessionStorageService } from '../storage/session-storage/session-storage.service';\nimport { Injectable, inject } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ControlStateSaveService {\n  private sessionStorageService = inject(SessionStorageService);\n\n\n  setControlState(stateName: string, value: any) {\n    this.sessionStorageService.setItem(stateName, JSON.stringify(value));\n  }\n\n  getControlState<T>(stateName: string): T {\n    const value = this.sessionStorageService.getItem(stateName);\n    return JSON.parse(value) as T;\n  }\n\n  async removeControlState(stateName: string) {\n    await this.sessionStorageService.removeItem(stateName);\n  }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class UrlService {\n\n  public urls: any;\n\n  constructor() {\n    this.urls = {\n      external: null,\n      lastEntered: null, // last entered before login\n      lastVisited: null, // last visited within the app\n      current: null // current viewed url\n    };\n  }\n\n  getUrls() {\n    return this.urls;\n  }\n\n}\n","import { Injectable, inject } from '@angular/core';\nimport { LocalStorageKeys } from '../../constants/LocalStorageKeys';\nimport { LocalStorageService } from '../storage/local-storage/local-storage.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class UserSettingsService {\n  private localStorageService = inject(LocalStorageService);\n\n\n\n  private fillSettingsObject(userSettings, templateId, name, settings, value) {\n\n    if (!userSettings[templateId]) {\n      userSettings[templateId] = {};\n    }\n\n    if (!userSettings[templateId][name]) {\n      userSettings[templateId][name] = {};\n    }\n\n    userSettings[templateId][name][settings] = value;\n\n    return userSettings;\n\n  }\n\n  saveSettings(templateId, name, settings, value) {\n\n    let userSettings: any = this.localStorageService.getItem(LocalStorageKeys.USER_SETTINGS);\n\n    if (userSettings) {\n\n      try {\n        userSettings = JSON.parse(userSettings);\n      } catch (e) {\n        userSettings = {};\n      } finally {\n        userSettings = this.fillSettingsObject(userSettings, templateId, name, settings, value);\n      }\n\n    } else {\n      userSettings = {};\n      userSettings = this.fillSettingsObject(userSettings, templateId, name, settings, value);\n    }\n\n    this.localStorageService.setItem(LocalStorageKeys.USER_SETTINGS, JSON.stringify(userSettings));\n\n  }\n\n  getSettings(templateId, name, settings) {\n\n    let userSettings = this.localStorageService.getItem(LocalStorageKeys.USER_SETTINGS);\n\n    if (userSettings) {\n\n      try {\n\n        userSettings = JSON.parse(userSettings);\n\n        if (userSettings[templateId]\n          && userSettings[templateId][name]\n          && userSettings[templateId][name][settings]) {\n\n          return userSettings[templateId][name][settings];\n\n        }\n\n      } catch (e) { }\n    }\n\n    return null;\n  }\n\n}\n","import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\nimport { NgModule, inject } from '@angular/core';\nimport { IApplicationState } from './redux/state/application.state';\nimport { AppStore } from './redux/store/app.store';\nimport { ReduxStoreService } from './redux/store/redux-store.service';\nimport { RootStore } from './redux/store/root.store';\nimport { getStore } from './redux/store/store';\nimport { ClientAccessService } from './services/access/client-access.service';\nimport { BroadcastService } from './services/broadcast/broadcast.service';\nimport { ComponentService } from './services/component/component.service';\nimport { DataService } from './services/data/data.service';\nimport { RestDataService } from './services/data/rest-data.service';\nimport { ChangedDocumentService } from './services/document/changed-document.service';\nimport { ClientSystemHeaderService } from './services/document/client-system-header.service';\nimport { CurrentChildDocumentService } from './services/document/current-child-document.service';\nimport { CurrentDocumentInfoService } from './services/document/current-document-info.service';\nimport { CurrentDocumentService } from './services/document/current-document.service';\nimport { DocumentSaveService } from './services/document/document-save.service';\nimport { DocumentUpdateService } from './services/document/document-update.service';\nimport { DocumentService } from './services/document/document.service';\nimport { FinaliseValueFieldService } from './services/document/finalise-value-field.service';\nimport { MandatoryFieldService } from './services/document/mandatory-field.service';\nimport { ModifiedFieldService } from './services/document/modified-field.service';\nimport { TemplateHtmlService } from './services/document/template-html.service';\nimport { TemplateService } from './services/document/template.service';\nimport { UnsavedDocumentService } from './services/document/unsaved-document.service';\nimport { StorageEventService } from './services/event/storage-event.service';\nimport { FileProviderService } from './services/file/file-provider.service';\nimport { DexieSearchService } from './services/indexeddb/dexie-search.service';\nimport { DexieWorkerService } from './services/indexeddb/dexie-worker.service';\nimport { IndexedDBService } from './services/indexeddb/indexed-db.service';\nimport { IndexedDBConnectorService } from './services/indexeddb/indexed-dbconnector.service';\nimport { IndexedDBPropertiesService } from './services/indexeddb/indexed-dbproperties.service';\nimport { FormColorService } from './services/layout/form-color.service';\nimport { ModifiedCSSService } from './services/layout/modified-css.service';\nimport { LazyScriptLoaderService } from './services/lazyload/lazy-script-loader.service';\nimport { DefaultStateService } from './services/navigation/default-state.service';\nimport { NavigationService } from './services/navigation/navigation.service';\nimport { NotificationService } from './services/notification/notification.service';\nimport { OfflineStatusService } from './services/offline-status/offline-status.service';\nimport { OfflineUtilService } from './services/offline/offline-util.service';\nimport { PageVisibilityService } from './services/page-visibility.service';\nimport { CustomFieldPreprocessorService } from './services/preprocessor/custom-field/custom-field-preprocessor.service';\nimport { PreProcessorFieldService } from './services/preprocessor/pre-processor-field.service';\nimport { DatatablesQueriesService, SearchQueriesService } from './services/queries/search-queries.service';\nimport { ClientResourceService } from './services/resource/client-resource.service';\nimport { RouterService } from './services/router/router.service';\nimport { ClientIncludeRuleSetService } from './services/rules/client-include-rule-set.service';\nimport { ClientRulesService } from './services/rules/client-rules.service';\nimport { IncludeDocumentDataService } from './services/rules/include-document-data.service';\nimport { RuleCacheService } from './services/rules/rule-cache.service';\nimport { RuleEngineService } from './services/rules/rule-engine.service';\nimport { SearchClientService } from './services/search/search-client.service';\nimport { SearchFilterService } from './services/search/search-filter.service';\nimport { SearchService } from './services/search/search.service';\nimport { SessionTestService } from './services/session/session-test.service';\nimport { ControlStateSaveService } from './services/state/control-state-save.service';\nimport { LocalStorageService } from './services/storage/local-storage/local-storage.service';\nimport { SessionStorageService } from './services/storage/session-storage/session-storage.service';\nimport { TabService } from './services/tab/tab.service';\nimport { UrlService } from './services/url/url.service';\nimport { LoggedInUserService } from './services/user/logged-in-user.service';\nimport { UserSettingsService } from './services/user/user-settings.service';\nimport { ValidationService } from './services/validation/validation.service';\nimport { VendorLibraryService } from './services/vendor-library/vendor-library.service';\nimport { UrlBasePathService } from './utils/UrlBasePathUtil';\nimport { KeyValueStorageService } from './services/key-value-storage/key-value-storage.service';\nimport { WorkerService } from './services/worker/workers.service';\nimport { PendingOperationService } from './services/pending-operations.service';\n\n// TODO: add dialog to entry files in app.module.ts\n\nexport function appStoreFactory() {\n  return new RootStore();\n}\n\n@NgModule({ declarations: [],\n    exports: [], imports: [], providers: [\n        { provide: AppStore, useFactory: appStoreFactory },\n        LoggedInUserService,\n        { provide: LocalStorageService, useClass: LocalStorageService },\n        { provide: SessionStorageService, useClass: SessionStorageService },\n        { provide: KeyValueStorageService, useClass: KeyValueStorageService },\n        DataService,\n        ReduxStoreService,\n        RestDataService,\n        ClientAccessService,\n        { provide: BroadcastService, useClass: BroadcastService },\n        DocumentService,\n        TemplateService,\n        ComponentService,\n        CurrentDocumentService,\n        CurrentChildDocumentService,\n        CurrentDocumentInfoService,\n        UnsavedDocumentService,\n        ChangedDocumentService,\n        ClientSystemHeaderService,\n        SearchFilterService,\n        OfflineStatusService,\n        SearchService,\n        ControlStateSaveService,\n        SessionTestService,\n        LazyScriptLoaderService,\n        IndexedDBPropertiesService,\n        IndexedDBService,\n        IndexedDBConnectorService,\n        DexieSearchService,\n        DexieWorkerService,\n        PageVisibilityService,\n        UserSettingsService,\n        FileProviderService,\n        OfflineUtilService,\n        FormColorService,\n        ModifiedCSSService,\n        DefaultStateService,\n        WorkerService,\n        NavigationService,\n        ValidationService,\n        CustomFieldPreprocessorService,\n        PreProcessorFieldService,\n        ModifiedFieldService,\n        TabService,\n        RuleCacheService,\n        ClientRulesService,\n        ClientIncludeRuleSetService,\n        RuleEngineService,\n        { provide: NotificationService, useClass: NotificationService },\n        DocumentSaveService,\n        DocumentUpdateService,\n        MandatoryFieldService,\n        TemplateHtmlService,\n        UrlService,\n        ClientResourceService,\n        StorageEventService,\n        { provide: UrlBasePathService, useClass: UrlBasePathService },\n        VendorLibraryService,\n        FinaliseValueFieldService,\n        IncludeDocumentDataService,\n        RouterService,\n        DatatablesQueriesService,\n        SearchQueriesService,\n        SearchClientService,\n        PendingOperationService,\n        provideHttpClient(withInterceptorsFromDi())\n    ] })\nexport class FormbirdServicesModule {\n  constructor() {\n    const appStore = inject<AppStore<IApplicationState>>(AppStore);\n\n    const store = getStore();\n    appStore.provideStore(store);\n  }\n}\n","export class ControlStateConstants {\n    public static CONTROL_STATE_STORAGE_PREFIX = 'ControlState_';\n    public static CONTROL_STATE_SIDEBAR_TOGGLE = ControlStateConstants.CONTROL_STATE_STORAGE_PREFIX + 'SideBarToggle';\n    public static CONTROL_STATE_SIDEBAR_TOGGLE_XS_SM = ControlStateConstants.CONTROL_STATE_STORAGE_PREFIX + 'SideBarToggleXsSm';\n}\n","const cleanRelatedDocs = function (docs) {\n\n    // remove _uiSelectChoiceLocked field\n    for (let i = 0; i < docs.length; i++) {\n\n        if ('_uiSelectChoiceLocked' in docs[i]) {\n\n            delete docs[i]['_uiSelectChoiceLocked'];\n        }\n    }\n};\n\nconst formatValueInDocument = function (tplItem, document) {\n\n    const field = tplItem.name;\n    const relatedFields = tplItem.relatedFields;\n\n    if (document[field]) {\n\n        for (let i = 0; i < document[field].length; i++) {\n            const value = document[field][i];\n\n            // if the value is in ElasticSearch format, convert it to the required related document format\n            if (value._source) {\n                const formattedValue = {\n                    documentId: value._source.documentId,\n                    name: ''\n                };\n\n                if (value._source.systemHeader.summaryName) {\n                    formattedValue.name = value._source.systemHeader.summaryName;\n                }\n\n                if (relatedFields) {\n\n                  const keys = Object.keys(relatedFields);\n                  for (let idx = 0; idx < keys.length; idx++) {\n\n                    const key = keys[idx];\n                    const val = relatedFields[key];\n\n                    if (value._source[val]) {\n                      formattedValue[key] = value._source[val];\n                    }\n                  }\n\n                }\n\n                document[field][i] = formattedValue;\n            }\n        }\n    }\n};\n\nexport const RelatedDocumentPreprocessor = {\n    preProcess: function (field, document) {\n        if (document[field.name]) {\n            cleanRelatedDocs(document[field.name]);\n            formatValueInDocument(field, document);\n        }\n    },\n\n    formatValueInDocument: formatValueInDocument\n};\n","import { Injectable, inject } from '@angular/core';\nimport { SharedUrlRoutes } from '@formbird/shared';\nimport { LocalStorageService } from '../storage/local-storage/local-storage.service';\nimport { LocalStorageKeys } from '../../constants/LocalStorageKeys';\n\nconst serverRoutes = SharedUrlRoutes.serverRoutes;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DynamicMetaTagService {\n  private localStorageService = inject(LocalStorageService);\n\n\n\n  private metaDefaultTitle = 'Formbird Version ' + this.localStorageService.getItem(LocalStorageKeys.APP_VERSION);\n  private metaDefaultDesc = 'Copyright ' + new Date().getFullYear() + ' Formbird Pty Ltd. All rights reserved.';\n  private metaDefaultImg = '../../../../../images/formbird-logo.png';\n  private metaTitleData;\n  private metaDescData;\n  private metaImgData;\n\n  /**\n   * set the meta tags in the html head of the page. This can be used by other applications to see details about the current\n   * document in the page, eg. with document unfurling in Skype or Slack\n   */\n  set(title, description, img) {\n    this.metaTitleData = title ? title : this.metaDefaultTitle;\n    this.metaDescData = description ? description : this.metaDefaultDesc;\n    this.metaImgData = img ? (serverRoutes.loadFile + '/' + img) : this.metaDefaultImg;\n\n    const metaTitleElm = document.getElementById('metaTitle');\n    if (metaTitleElm) {\n      metaTitleElm.setAttribute('content', this.metaTitleData);\n    }\n\n    const metaDescElm = document.getElementById('metaDesc');\n    if (metaDescElm) {\n      metaDescElm.setAttribute('content', this.metaDescData);\n    }\n\n    const metaImgElm = document.getElementById('metaImg');\n    if (metaImgElm) {\n      metaImgElm.setAttribute('content', this.metaImgData);\n    }\n  }\n\n  title() {\n    return this.metaTitleData;\n  }\n\n  description() {\n    return this.metaDescData;\n  }\n\n  image() {\n    return this.metaImgData;\n  }\n\n}\n","import { Injectable } from '@angular/core';\ndeclare const angular: any;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ModalService {\n  ajsService: any;\n\n  constructor() {\n    const element = document.querySelectorAll('div[ui-view]');\n    const injector = angular.element(element).injector();\n\n    this.ajsService = injector.get('ModalService');\n  }\n\n  showDialog(message, messageType?, succFunc?, errorFunc?, discardFunc?) {\n    this.ajsService.showDialog(message, messageType, succFunc, errorFunc, discardFunc);\n  }\n}\n","import {Injectable} from '@angular/core';\r\nimport {createCustomElement} from '@angular/elements';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\n\r\nexport class CustomElementService {\r\n\r\n  constructor() {}\r\n\r\n  convertToCustomElement = (component, selector, injector, version?, options?) => {\r\n\r\n    if (!version) {\r\n      version = 'NOT-SET';\r\n    }\r\n\r\n    if (!customElements.get(selector)) {\r\n      const scComponent = createCustomElement(component, { injector: injector });\r\n\r\n      const connectedCallback = scComponent.prototype.connectedCallback || function () {};\r\n      scComponent.prototype.connectedCallback = function() {\r\n        this.setAttribute('fb-component-version', version);\r\n        if (options) {\r\n          this.setAttribute('is-static-panel', options.isStaticPanel);\r\n          this.setAttribute('is-collapsible-panel', options.isCollapsiblePanel);\r\n        }\r\n        connectedCallback.call(this);\r\n      };\r\n\r\n      customElements.define(selector, scComponent);\r\n    }\r\n  }\r\n}\r\n","/*\n * Public API Surface of formbird-services\n */\n\nexport * from './formbird-services.module';\n\nexport * from './constants/ClientConstants';\nexport * from './constants/LocalStorageKeys';\nexport * from './constants/ControlStateConstants';\n\nexport * from './utils/UrlBasePathUtil';\nexport * from './services/version/version.service';\n\nexport * from './services/user/logged-in-user.service';\nexport * from './services/user/user-settings.service';\n\nexport * from './services/search/search-filter.service';\nexport * from './services/search/search.service';\n\nexport * from './services/storage/local-storage/local-storage.service';\nexport * from './services/storage/session-storage/session-storage.service';\n\nexport * from './services/data/data.service';\nexport * from './services/data/rest-data.service';\n\nexport * from './services/config/config.service';\n\nexport * from './services/access/client-access.service';\n\nexport * from './services/broadcast/broadcast.service';\n\nexport * from './services/component/component.service';\n\nexport * from './services/document/document.service';\nexport * from './services/document/template.service';\nexport * from './services/document/current-document-info.service';\nexport * from './services/document/current-document.service';\nexport * from './services/document/current-child-document.service';\nexport * from './services/document/unsaved-document.service';\nexport * from './services/document/client-system-header.service';\nexport * from './services/document/changed-document.service';\nexport * from './services/document/modified-field.service';\nexport * from './services/document/document-save.service';\nexport * from './services/document/document-update.service';\nexport * from './services/document/mandatory-field.service';\nexport * from './services/document/finalise-value-field.service';\n\nexport * from './services/event/storage-event.service';\n\nexport * from './services/file/file-provider.service';\n\nexport * from './services/indexeddb/indexed-dbproperties.service';\nexport * from './services/indexeddb/dexie-search.service';\nexport * from './services/indexeddb/indexed-db.service';\nexport * from './services/indexeddb/indexed-dbconnector.service';\n\nexport * from './services/layout/form-color.service';\nexport * from './services/layout/modified-css.service';\n\nexport * from './services/navigation/navigation.service';\nexport * from './services/navigation/default-state.service';\n\nexport * from './services/notification/notification.service';\n\nexport * from './services/offline-status/offline-status.service';\n\nexport * from './services/preprocessor/custom-field/custom-field-preprocessor.service';\nexport * from './services/preprocessor/pre-processor-field.service';\nexport * from './services/preprocessor/related-document.preprocessor';\n\nexport * from './services/resource/client-resource.service';\nexport * from './services/router/router.service';\n\nexport * from './services/rules/client-include-rule-set.service';\nexport * from './services/rules/client-rule-context';\nexport * from './services/rules/client-rules.service';\nexport * from './services/rules/rule-engine.service';\nexport * from './services/rules/proxy-engine.service';\nexport * from './services/rules/rule-cache.service';\n\nexport * from './services/session/session-test.service';\n\nexport * from './services/state/control-state-save.service';\n\nexport * from './services/lazyload/lazy-script-loader.service';\n\nexport * from './services/page-visibility.service';\n\nexport * from './services/offline/offline-util.service';\n\nexport * from './utils/MandatoryValueProcessor';\n\nexport * from './services/tab/tab.service';\n\nexport * from './services/tag/dynamic-meta-tag.service';\n\nexport * from './services/validation/validation.service';\nexport * from './services/vendor-library/vendor-library.service';\n\nexport * from './services/url/url.service';\n\nexport * from './redux/actions/form-new.actions';\n\nexport * from './redux/reducers/form-document.reducer';\n\nexport * from './redux/store/app.store';\nexport * from './redux/decorators/select';\nexport * from './redux/selectors/selectors';\n\nexport * from './redux/state/application.state';\nexport * from './redux/state/form-new.state';\nexport * from './redux/store/store';\n\nexport * from './services/socket/web-socket.service';\nexport * from './services/document/document-session.service';\n\nexport * from './services/key-value-storage/key-value-storage.service';\n\nexport * from './services/rules/client-include-rule-set.service';\n\nexport * from './services/modal.service';\n\nexport * from './services/injector/formbird-injector.service';\nexport * from './services/custom-element/custom-element.service';\nexport * from './services/document/latest-document.service';\nexport * from './services/queries/search-queries.service';\nexport * from './services/search/search-client.service';\nexport * from './services/pending-operations.service';\nexport * from './services/indexeddb/dexie-worker.service';\nexport * from './services/worker/workers.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["logger","sniffSelectorType","resolver","getIn","resolveToFunctionSelector","serverRoutes","switchMap","IdGenerator","SharedUrls","map","cloneDeep"],"mappings":"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"}