{ "version": 3, "sources": ["../../../packages/shared/tm3-core/enums/feature-enum.ts", "../../../packages/apps/connect/core/controls/features-flags/feature-store.ts", "../../../packages/apps/connect/core/controls/features-flags/feature/index.tsx"], "sourcesContent": ["enum FeatureEnum {\n TM3_CLASSES_ENABLED = 'TM3_CLASSES_ENABLED',\n PRONTO_INTEGRATION = 'PRONTO_INTEGRATION',\n USER_DIARY_RESTRICTION = 'USER_DIARY_RESTRICTION',\n TM3_HEALTHCODE = 'TM3_HEALTHCODE',\n ROLE_MANAGER = 'ROLE_MANAGER',\n TM3_VIDEO_ENABLED = 'TM3_VIDEO_ENABLED',\n CASEFLOW_PREREFERRAL_INFORMATION = 'CASEFLOW_PREREFERRAL_INFORMATION',\n CASEFLOW_PATIENT_PORTAL = 'CASEFLOW_PATIENT_PORTAL',\n CASEFLOW_REFERRAL_PORTAL = 'CASEFLOW_REFERRAL_PORTAL',\n CASEFLOW_EDITABLE_PRICING = 'CASEFLOW_EDITABLE_PRICING',\n MEDIPASS_ACTIVE = 'MEDIPASS_ACTIVE',\n QSW_ENABLED = 'QSW_ENABLED',\n MY_CLINIC_INTEGRATION = 'MY_CLINIC_INTEGRATION',\n UPGRADE_ENABLED = 'UPGRADE_ENABLED',\n FIX_LEGACY_ANNOTATIONS_CONVERSION = 'FIX_LEGACY_ANNOTATIONS_CONVERSION',\n FF_NEW_DOCS_UI = 'FF_NEW_DOCS_UI',\n FF_DIARY_COLOURS = 'FF_DIARY_COLOURS',\n PRONTO_ROADMAP_PHASE_ONE = 'PRONTO_ROADMAP_PHASE_ONE',\n FF_CASE_NOTES = 'FF_CASE_NOTES',\n APPOINTMENT_PREPAYMENT = 'APPOINTMENT_PREPAYMENT',\n FF_DX_DASHBOARDS = 'FF_DX_DASHBOARDS',\n SQUARE = 'FF_SQUARE',\n AUTOMATIONS_VNEXT = 'FF_AUTOMATIONS_VNEXT',\n FF_REPORTS = 'FF_REPORTS',\n FF_NW_LOCATION_FACILITIES = 'FF_NW_LOCATION_FACILITIES',\n FF_VHG_MITEL_CHAT = 'FF_VHG_MITEL_CHAT',\n FF_NEW_REFERRAL_PORTAL = 'FF_NEW_REFERRAL_PORTAL',\n FF_DEFAULT_CLEAR_ACCEPT = 'FF_DEFAULT_CLEAR_ACCEPT',\n FF_ACCOUNTING_INTEGRATION_ENABLED = 'FF_ACCOUNTING_INTEGRATION_ENABLED',\n FF_ALLOW_CUSTOM_SMS = 'FF_ALLOW_CUSTOM_SMS',\n STOCK_LEVELS = 'FF_STOCK_LEVELS',\n BUSINESS_SETTINGS_RP = 'FF_BUSINESS_SETTINGS_RP',\n FF_CEMPLICITY = 'FF_CEMPLICITY',\n WAITING_LIST_PAYMENTS_ENABLED = 'WAITING_LIST_PAYMENTS_ENABLED',\n FF_Embeddable = 'FF_Embeddable',\n FF_NEWUX = 'FF_NEWUX',\n FF_BLOCK_EDITOR = 'FF_BLOCK_EDITOR',\n FF_NEWUX_CONTACTS = 'FF_NEWUX_CONTACTS',\n FF_NEW_REGISTRATION_LAYOUT = 'FF_NEW_REGISTRATION_LAYOUT',\n FF_NEWUX_PRACTITONERS = 'FF_NEWUX_PRACTITONERS',\n FF_TM3_STRIPE_TERMINALS = 'FF_TM3_STRIPE_TERMINALS',\n FF_CONNECT_HIDE_FROM_EXPLORE = 'FF_CONNECT_HIDE_FROM_EXPLORE',\n FF_GDS_PARTS_CATALOGUE = 'FF_GDS_PARTS_CATALOGUE',\n FF_TAX_EXEMPTION = 'FF_TAX_EXEMPTION'\n}\n\nexport default FeatureEnum;\n", "import { ConfigObservable } from 'bz-stores/lib/config';\nimport BaseStore from 'bz-stores/mobx/base-store';\nimport { action, computed, observable } from 'mobx';\nimport { ConnectFeatureFlagsRequest } from 'tm3-core/api.dtos';\nimport FeatureEnum from 'tm3-core/enums/feature-enum';\nimport type IFeature from 'tm3-core/interfaces/feature';\n\nclass ConnectFeaturesStore {\n static readonly testRegex = /^true$/i;\n\n @observable loaded: boolean = false;\n @observable flags = observable.map();\n\n public load(): Promise {\n return new Promise((resolve, reject) => {\n BaseStore.defaultClient\n .get(new ConnectFeatureFlagsRequest())\n .then((res: any) => {\n this.flags.replace(res.result);\n this.loaded = true;\n resolve();\n })\n .catch(() => {\n reject();\n });\n });\n }\n\n @action.bound\n public has(features: Array, all: boolean = true): boolean {\n if (!this.loaded) {\n return false;\n }\n\n const fn = (x: FeatureEnum) => {\n const flag = this.flags.get(x) || 'false';\n return ConnectFeaturesStore.testRegex.test(flag);\n };\n\n return !!all ? features.every(fn) : features.some(fn);\n }\n\n public match(value: IFeature, skipConfig: boolean = false): boolean {\n if (!this.loaded) {\n return false;\n }\n\n const { flags, config = {} } = value;\n if (!this.has(flags)) {\n return false;\n }\n if (skipConfig) return true;\n\n return Object.entries(config).every((x) => {\n let [key, value] = x;\n let val = ConfigObservable.config[key] || '';\n return val.toLowerCase() === value!.toLowerCase();\n });\n }\n\n @computed\n get showZoomPro() {\n const { ZOOM_PRO } = ConfigObservable.config;\n return this.videoCanBeTurnedOn && ZOOM_PRO.toUpperCase() === 'TRUE';\n }\n\n @computed\n get video() {\n const { VIDEO_INTEGRATION } = ConfigObservable.config;\n return this.videoCanBeTurnedOn && VIDEO_INTEGRATION !== 'NONE';\n }\n\n @computed\n get showVideoLink() {\n const { VIDEO_INTEGRATION } = ConfigObservable.config;\n return this.video && VIDEO_INTEGRATION === 'OTHER';\n }\n\n @computed\n get videoCanBeTurnedOn() {\n return this.loaded && this.has([FeatureEnum.TM3_VIDEO_ENABLED]);\n }\n\n @computed\n get patientPortalEnabled() {\n const { CASEFLOW_PATIENT_PORTAL_ENABLED } = ConfigObservable.config;\n return (\n this.loaded &&\n this.has([FeatureEnum.CASEFLOW_PATIENT_PORTAL]) &&\n CASEFLOW_PATIENT_PORTAL_ENABLED !== 'FALSE'\n );\n }\n\n @computed\n get referralPortalEnabled() {\n const { CASEFLOW_REFERRAL_PORTAL_ENABLED } = ConfigObservable.config;\n return (\n this.loaded &&\n this.has([FeatureEnum.CASEFLOW_REFERRAL_PORTAL]) &&\n CASEFLOW_REFERRAL_PORTAL_ENABLED !== 'FALSE'\n );\n }\n\n @computed\n get editablePricingEnabled() {\n const { CASEFLOW_EDITABLE_PRICING_ENABLED } = ConfigObservable.config;\n\n return (\n this.loaded &&\n this.has([FeatureEnum.CASEFLOW_EDITABLE_PRICING]) &&\n CASEFLOW_EDITABLE_PRICING_ENABLED !== 'FALSE'\n );\n }\n\n @computed\n get preReferralInformation() {\n const { CASEFLOW_PREREFERRAL_INFORMATION_ENABLED } = ConfigObservable.config;\n\n return (\n this.loaded &&\n this.has([FeatureEnum.CASEFLOW_PREREFERRAL_INFORMATION]) &&\n CASEFLOW_PREREFERRAL_INFORMATION_ENABLED === 'TRUE'\n );\n }\n}\n\nconst connectFeaturesStore = new ConnectFeaturesStore();\nexport default connectFeaturesStore;\n", "import * as React from 'react';\n\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport type FeatureEnum from 'tm3-core/enums/feature-enum';\nimport type IFeature from 'tm3-core/interfaces/feature';\nimport ConnectFeaturesStore from '../feature-store';\n\ninterface IProps extends React.PropsWithChildren {\n premium?: boolean;\n fallback?: React.ReactNode;\n valueOr?: IFeature[];\n valueAnd?: IFeature[];\n skipConfig?: boolean;\n value?: IFeature;\n flag?: FeatureEnum;\n}\n\n@observer\nclass ConnectFeature extends React.Component {\n public static readonly defaultProps: Partial = {\n premium: false\n };\n\n render() {\n if (!this.show) {\n return !!this.props.fallback ? <>{this.props.fallback} : null;\n }\n\n return <>{this.props.children};\n }\n\n @computed\n get show(): boolean {\n const { flag, value, valueOr, valueAnd } = this.props;\n const { loaded } = ConnectFeaturesStore;\n\n if (!loaded) {\n return false;\n }\n if (!!flag) {\n return ConnectFeaturesStore.has([flag]);\n }\n if (!!value) return this.isAllowed(value);\n\n if (!!valueAnd) {\n for (let v of valueAnd) {\n if (!this.isAllowed(v)) return false;\n }\n return true;\n }\n if (!!valueOr) {\n for (let v of valueOr) {\n if (this.isAllowed(v)) return true;\n }\n }\n return false;\n }\n\n private isAllowed(value: IFeature): boolean {\n const { hasPremium, isTrial } = ConnectFeaturesStore;\n\n if (!!value.premium && !hasPremium) {\n if (!value.allowTrial || !isTrial) {\n return false;\n }\n }\n return ConnectFeaturesStore.match(value, this.props.skipConfig);\n }\n}\n\nexport default ConnectFeature;\n"], "mappings": "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", "names": ["init_virtual_process_polyfill", "init_buffer", "FeatureEnum", "feature_enum_default", "init_virtual_process_polyfill", "init_buffer", "_ConnectFeaturesStore", "observable", "resolve", "reject", "base_store_default", "ConnectFeatureFlagsRequest", "res", "features", "all", "fn", "__name", "x", "flag", "value", "skipConfig", "flags", "config", "key", "ConfigObservable", "ZOOM_PRO", "VIDEO_INTEGRATION", "feature_enum_default", "CASEFLOW_PATIENT_PORTAL_ENABLED", "CASEFLOW_REFERRAL_PORTAL_ENABLED", "CASEFLOW_EDITABLE_PRICING_ENABLED", "CASEFLOW_PREREFERRAL_INFORMATION_ENABLED", "ConnectFeaturesStore", "__decorateClass", "action", "computed", "connectFeaturesStore", "feature_store_default", "init_virtual_process_polyfill", "init_buffer", "React", "import_jsx_runtime", "ConnectFeature", "flag", "value", "valueOr", "valueAnd", "loaded", "feature_store_default", "v", "hasPremium", "isTrial", "__name", "__decorateClass", "computed", "observer", "feature_default"] }