{"version":3,"sources":["applicationSettings/ApplicationSettingsRepository.tsx","applicationSettings/tabs/DocumentPublishingTab.tsx","applicationSettings/tabs/DataPublishingTab.tsx","applicationSettings/tabs/LicencingTab.tsx","applicationSettings/tabs/StaffBudgetsTab.tsx","applicationSettings/tabs/FutureTimeSynchronizationTab.tsx","applicationSettings/tabs/TaskPublishingTab.tsx","applicationSettings/tabs/ClientNotesTab.tsx","applicationSettings/tabs/LabelSettingsTab.tsx","applicationSettings/tabs/SystemOptionsTab.tsx","applicationSettings/tabs/PublishingAndSynchronisationTab.tsx","applicationSettings/ApplicationSettingsPage.tsx","common/constants.ts"],"names":["retrieveApplicationSettingsData","refreshData","onSuccess","onError","fetchPolicy","query","APPLICATION_SETTINGS_QUERY","variables","then","results","data","catch","reason","useApplicationSettings","error","loading","useStyles","makeStyles","theme","createStyles","root","display","flex","flexFlow","padding","textField","width","buttonWrapper","margin","justifyContent","loaderWrapper","formGroup","alignItems","marginLeft","DocumentPublishingTab","props","classes","tenant","useTenant","isLoading","isFormChanged","onSubmitLoading","state","setState","formState","publishDocuments","config","publishDocumentFolders","updateDocumentPublishingMutation","DOCUMENT_PUBLISHING_MUTATION","onReset","form","setConfig","batch","reset","onChangge","input","event","checked","onChange","change","className","sourceSystem","onSubmit","values","onSave","tempData","_prevState","initialValues","initialValuesEqual","keepDirtyOnReinitialize","subscription","submitting","pristine","render","handleSubmit","id","prevState","Grid","container","spacing","item","xs","md","justify","FormGroup","name","touched","value","FormControlLabel","control","Switch","color","label","disabled","undefined","Button","variant","type","onClick","DataPublishingTab","publishFinancials","publishTimeline","timeOnly","uodateDataPublisherMutation","DATA_PUBLISHER_MUTATION","Checkbox","LicencingTab","internalRegisteredUsers","uodateLicencingMutation","LICENCING_MUTATION","meta","TextField","autoComplete","helperText","StaffBudgetsTab","enableBudgetSync","updateStaffBudgetConfig","UPDATE_STAFF_BUDGET_CONFIG_MUTATION","initial","FutureTimeSynchronizationTab","enableFutureTimeSynchronization","FUTURE_TIME_SYNCHRONIZE_MUTATION","TaskPublishingTab","publishTasks","updateTaskPublishingMutation","TASK_PUBLISHING_MUTATION","ClientNotesTab","enableClientNotesSync","UpdateClientNotesConfigMutation","LabelSettingsTab","personActingLabel","personResponsibleLabel","updateLabelSettings","LabelSettingsMutation","localStorage","setItem","LocalStorageEnum","PersonResponsible","PersonActing","lg","sm","required","getFieldState","SystemOptionsTab","emailSizeLimit","updateSystemOptionConfig","UpdateSystemOptionConfigMutation","clinetNotesData","documentPublisherData","futureTimeSynchronizationData","staffBudgetSettingsData","taskPublisherSettingsData","updatePublishingAndSnycConfig","UpdatePublishingAndSyncSettingsQuery","tempClientNotesData","tempDocumentPublisherData","tempFutureTimeSynchronizationData","tempStaffBudgetSettingsData","tempTaskPublisherSettingsData","ApplicationSettingsList","wrapper","backgroundColor","sidebar","maxWidth","position","sidebarInner","sidebarList","top","right","left","bottom","overflow","paddingRight","content","flexGrow","tabLoaderWrapper","ApplicationSettingsPage","selectedTable","ClientNotes","tabs","isTabLoading","mobileSettings","dataPublisherSettings","documentPublisherSettings","taskPublisherSettings","licencing","staffBudgetSettings","futureTimeSynchronization","clientNotesSettings","labelSettings","systemOptions","pageState","setPageState","routeCommand","match","params","command","fetchTabData","routeTab","tab","console","log","subscribeSettingNotificationObj","subscribeSettingNotification","unsubscribe","subscribe","next","settingNotification","status","message","err","onApplicationSettingsRetrieved","settings","applications","settingNames","settingName","FirmSettingConfigurationBanner","title","onClickBack","history","push","List","map","internalName","ListItem","key","guidID","button","selected","ListItemAvatar","DocumentPublishing","TaskPublishing","Avatar","Licencing","StaffBudgets","FutureTimeSynchronization","LabelSettings","ListItemText","primary","secondary","description","DataPublishing","SettingOptions","PublishingAndSynchronisation","SourceMessage","ExternalMessageToClient","InternalMessageOnlyFromInternalUser","ExternalMessageFromClient","DocumentListFile","ServiceLevel"],"mappings":"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","file":"static/js/main~f71cff67.4920c5b3.chunk.js","sourcesContent":["import { FetchPolicy, WatchQueryFetchPolicy } from 'apollo-client';\r\nimport gql from 'graphql-tag';\r\nimport { client } from '..';\r\nimport { useQuery } from 'react-apollo';\r\n\r\nexport interface ApplicationSettingsData {\r\n settings: Settings;\r\n}\r\nexport interface Settings {\r\n id: number;\r\n applications: Applications;\r\n}\r\n\r\nexport interface Applications {\r\n id: number;\r\n settingNames: SettingNames;\r\n mobileSettings: MobileSettings;\r\n dataPublisherSettings: DataPublisherSettings;\r\n documentPublisherSettings: DocumentPublisherSettings;\r\n taskPublisherSettings: TaskPublisherSettings;\r\n licencing: Licencing;\r\n staffBudgetSettings: StaffBudgetSettings;\r\n futureTimeSynchronization: FutureTimeSynchronization;\r\n clientNotesSettings: ClientNotesSettings;\r\n labelSettings: LabelSettings;\r\n systemOptions: SystemOptions;\r\n}\r\n\r\nexport interface SystemOptions {\r\n config: SystemOptionsConfig;\r\n}\r\n\r\nexport interface LabelSettings {\r\n config: LabelSettingsConfig;\r\n}\r\n\r\nexport interface ClientNotesSettings {\r\n config: ClientNotesSettingsConfig;\r\n}\r\n\r\nexport interface ClientNotesSettingsConfig {\r\n enableClientNotesSync: boolean;\r\n}\r\n\r\nexport interface StaffBudgetSettings {\r\n config: StaffBudgetSettingsConfig;\r\n}\r\n\r\nexport interface StaffBudgetSettingsConfig {\r\n enableBudgetSync: boolean;\r\n}\r\n\r\nexport interface DataPublisherSettings {\r\n config: DataPublisherSettingsConfig;\r\n}\r\n\r\nexport interface DataPublisherSettingsConfig {\r\n publishTimeline: boolean;\r\n publishFinancials: boolean;\r\n timeOnly: boolean;\r\n}\r\n\r\nexport interface DocumentPublisherSettings {\r\n config: DocumentPublisherSettingsConfig;\r\n}\r\n\r\nexport interface TaskPublisherSettings {\r\n config: TaskPublisherSettingsConfig;\r\n\r\n}\r\n\r\nexport interface FutureTimeSynchronization {\r\n enableFutureTimeSynchronization: boolean;\r\n}\r\n\r\nexport interface DocumentPublisherSettingsConfig {\r\n publishDocuments: boolean;\r\n publishDocumentFolders: boolean;\r\n}\r\n\r\nexport interface TaskPublisherSettingsConfig {\r\n publishTasks: boolean;\r\n}\r\n\r\nexport interface MobileSettings {\r\n config: MobileSettingsConfig;\r\n}\r\n\r\nexport interface MobileSettingsConfig {\r\n showTimerButton: boolean;\r\n showMatterSelection: boolean;\r\n showPhoneCallButton: boolean;\r\n}\r\n\r\nexport interface Licencing {\r\n config: LicencingConfig;\r\n}\r\n\r\nexport interface LicencingConfig {\r\n internalRegisteredUsers: number;\r\n}\r\nexport interface SettingNames {\r\n recordCount: number;\r\n settingName: SettingName[];\r\n}\r\n\r\nexport interface SettingName {\r\n id: number;\r\n title: string;\r\n description: string;\r\n guidID: string;\r\n internalName: string;\r\n}\r\n\r\nexport interface LabelSettingsConfig {\r\n personActingLabel: string | null;\r\n personResponsibleLabel: string | null;\r\n}\r\n\r\nexport interface SystemOptionsConfig {\r\n emailSizeLimit: number | null;\r\n}\r\n\r\nexport function retrieveApplicationSettingsData(\r\n refreshData: boolean,\r\n onSuccess: (data: ApplicationSettingsData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void)\r\n : void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n\r\n client.query({\r\n query: APPLICATION_SETTINGS_QUERY,\r\n variables: {},\r\n fetchPolicy: fetchPolicy\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any; }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any ) => { onError(reason); });\r\n}\r\n\r\nexport const APPLICATION_SETTINGS_QUERY = gql`\r\n query applicationSettings {\r\n settings {\r\n id\r\n applications {\r\n id\r\n settingNames {\r\n recordCount,\r\n settingName {\r\n id,\r\n title,\r\n description,\r\n guidID,\r\n internalName\r\n } \r\n }\r\n mobileSettings {\r\n config {\r\n showTimerButton\r\n showMatterSelection\r\n showPhoneCallButton\r\n }\r\n }\r\n dataPublisherSettings {\r\n config {\r\n publishTimeline\r\n publishFinancials\r\n timeOnly\r\n }\r\n }\r\n documentPublisherSettings {\r\n config {\r\n publishDocuments\r\n publishDocumentFolders\r\n }\r\n }\r\n taskPublisherSettings {\r\n config {\r\n publishTasks\r\n }\r\n }\r\n licencing {\r\n config {\r\n internalRegisteredUsers\r\n }\r\n }\r\n clientNotesSettings {\r\n config {\r\n enableClientNotesSync\r\n }\r\n }\r\n staffBudgetSettings {\r\n config {\r\n enableBudgetSync\r\n }\r\n }\r\n futureTimeSynchronization {\r\n enableFutureTimeSynchronization\r\n }\r\n labelSettings {\r\n config {\r\n personActingLabel\r\n personResponsibleLabel\r\n }\r\n }\r\n systemOptions {\r\n config {\r\n emailSizeLimit\r\n }\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport const useApplicationSettings = (fetchPolicy?: WatchQueryFetchPolicy) => {\r\n\r\n const { data, error, loading } = useQuery(APPLICATION_SETTINGS_QUERY, {\r\n fetchPolicy: fetchPolicy ?? 'cache-and-network'\r\n });\r\n\r\n return {\r\n data,\r\n error,\r\n loading\r\n };\r\n\r\n};","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport { Button, createStyles, FormControlLabel, FormGroup, Grid, makeStyles, Switch, Theme } from '@material-ui/core';\r\nimport { FormApi } from 'final-form';\r\nimport gql from 'graphql-tag';\r\nimport React, { useState } from 'react';\r\nimport { useMutation } from 'react-apollo';\r\nimport { AnyObject, Field, FieldInputProps, Form, FormSpy } from 'react-final-form';\r\nimport { showNotification } from '../../App';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport { DocumentPublisherSettings } from '../ApplicationSettingsRepository';\r\nimport { useTenant } from '../../hooks/useTenant';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n display: 'flex',\r\n flex: 1,\r\n flexFlow: 'column',\r\n padding: '0 30px',\r\n },\r\n textField: {\r\n width: '100%'\r\n },\r\n buttonWrapper: {\r\n margin: '0 -10px',\r\n width: '100%',\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n '& > button': {\r\n margin: '0 10px',\r\n }\r\n },\r\n loaderWrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n flex: 1,\r\n },\r\n formGroup: {\r\n alignItems: 'flex-start',\r\n '& .MuiFormControlLabel-root': {\r\n marginLeft: 0,\r\n }\r\n }\r\n })\r\n);\r\n\r\ninterface FormState {\r\n publishDocuments: boolean;\r\n publishDocumentFolders: boolean;\r\n}\r\ninterface DocumentPublishingTabState {\r\n isLoading: boolean;\r\n isFormChanged: boolean;\r\n onSubmitLoading: boolean;\r\n}\r\n\r\ninterface DocumentPublishingTabProps {\r\n data: DocumentPublisherSettings | null;\r\n onSave?: (data: DocumentPublisherSettings | null) => void;\r\n}\r\n\r\nexport default function DocumentPublishingTab(props: DocumentPublishingTabProps) {\r\n\r\n const classes = useStyles();\r\n\r\n const tenant = useTenant();\r\n\r\n const [state, setState] = useState({\r\n isLoading: false,\r\n isFormChanged: false,\r\n onSubmitLoading: false,\r\n });\r\n\r\n const [formState] = useState({\r\n publishDocuments: props.data && props.data.config ? props.data.config.publishDocuments : false,\r\n publishDocumentFolders: props.data && props.data.config ? props.data.config.publishDocumentFolders : false,\r\n });\r\n\r\n // tslint:disable-next-line: no-any\r\n const [updateDocumentPublishingMutation] = useMutation(DOCUMENT_PUBLISHING_MUTATION);\r\n\r\n // tslint:disable-next-line: no-any\r\n const onFormValueChanged = (changeProps: any) => {\r\n if (!changeProps.pristine) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isFormChanged: true\r\n };\r\n });\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n // const required = (value: any) => {\r\n // return value ? undefined : 'Required';\r\n // };\r\n\r\n const onReset = (form: FormApi) => () => {\r\n form.setConfig('keepDirtyOnReinitialize', false);\r\n form.batch(() => {\r\n form.reset();\r\n });\r\n form.setConfig('keepDirtyOnReinitialize', true);\r\n };\r\n\r\n const onSubmit = (form: FormApi, values: AnyObject) => {\r\n\r\n // tslint:disable-next-line: no-console\r\n updateDocumentPublishingMutation({\r\n variables: {\r\n publishDocuments: values.publishDocuments,\r\n publishDocumentFolders: values.publishDocumentFolders\r\n }\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n \r\n if (props.onSave && props.data) {\r\n const tempData = props.data;\r\n tempData.config.publishDocuments = values.publishDocuments;\r\n tempData.config.publishDocumentFolders = values.publishDocumentFolders;\r\n props.onSave(tempData);\r\n }\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to update document publisher.', reason, 'error');\r\n setState((_prevState) => {\r\n return {\r\n ..._prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n });\r\n };\r\n\r\n const onChangge = (input: FieldInputProps, form: FormApi) => (event: React.ChangeEvent, checked: boolean) => {\r\n \r\n input.onChange(checked);\r\n\r\n if (!checked) { form.change('publishDocumentFolders', false); }\r\n };\r\n\r\n if (state.isLoading || tenant.loading) {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n } \r\n\r\n const sourceSystem = tenant.data?.tenant.sourceSystem === 'PracticeEvolve';\r\n\r\n return (\r\n
\r\n ) => onSubmit(form, values)} \r\n initialValues={formState}\r\n initialValuesEqual={() => true}\r\n keepDirtyOnReinitialize={true}\r\n subscription={{\r\n submitting: true,\r\n pristine: true\r\n }}\r\n render={({\r\n handleSubmit,\r\n form,\r\n submitting,\r\n pristine,\r\n values\r\n }) => (\r\n
\r\n {\r\n onFormValueChanged(props);\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n }\r\n label=\"Publish Documents\"\r\n />\r\n )}\r\n \r\n {sourceSystem ? (\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n \r\n {({ input, meta }) => (\r\n \r\n }\r\n label=\"Publish Document Folders\"\r\n />\r\n )}\r\n \r\n )}\r\n \r\n ) : undefined}\r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n {/* {printJson(values)} */}\r\n
\r\n \r\n )}\r\n />\r\n
\r\n );\r\n}\r\n\r\n// tslint:disable-next-line: no-any\r\nexport function printJson(values: any) {\r\n if (values) {\r\n return (\r\n <>\r\n
\r\n                    {JSON.stringify(values, undefined, 2)}\r\n                
\r\n \r\n );\r\n } else {\r\n return (\r\n <>\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n
\r\n                            {JSON.stringify(values, undefined, 2)}\r\n                            {/*  */}\r\n                        
\r\n )}\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\ninterface DocumentPublishingMutationParams {\r\n publishDocuments: boolean;\r\n publishDocumentFolders: boolean;\r\n}\r\n\r\nconst DOCUMENT_PUBLISHING_MUTATION = gql`\r\n mutation DocumentPublishingMutation($publishDocuments: Boolean, $publishDocumentFolders: Boolean) {\r\n applicationSettings {\r\n documentPublisherSettings {\r\n update (publishDocuments: $publishDocuments, publishDocumentFolders: $publishDocumentFolders) {\r\n error\r\n status\r\n }\r\n }\r\n }\r\n }\r\n`;","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport { Button, Checkbox, createStyles, FormControlLabel, FormGroup, Grid, makeStyles, Theme } from '@material-ui/core';\r\nimport { FormApi } from 'final-form';\r\nimport gql from 'graphql-tag';\r\nimport React, { useState } from 'react';\r\nimport { useMutation } from 'react-apollo';\r\nimport { AnyObject, Field, Form, FormSpy } from 'react-final-form';\r\nimport { showNotification } from '../../App';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport { DataPublisherSettings } from '../ApplicationSettingsRepository';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n display: 'flex',\r\n flex: 1,\r\n flexFlow: 'column',\r\n padding: '0 30px',\r\n },\r\n textField: {\r\n width: '100%'\r\n },\r\n buttonWrapper: {\r\n margin: '0 -10px',\r\n width: '100%',\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n '& > button': {\r\n margin: '0 10px',\r\n }\r\n },\r\n loaderWrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n flex: 1,\r\n },\r\n formGroup: {\r\n alignItems: 'flex-start',\r\n '& .MuiFormControlLabel-root': {\r\n marginLeft: 0,\r\n }\r\n }\r\n })\r\n);\r\n\r\ninterface FormState {\r\n publishFinancials: boolean;\r\n publishTimeline: boolean;\r\n timeOnly: boolean;\r\n}\r\ninterface DataPublishingTabState {\r\n isLoading: boolean;\r\n isFormChanged: boolean;\r\n onSubmitLoading: boolean;\r\n}\r\n\r\ninterface DataPublishingTabProps {\r\n data: DataPublisherSettings | null;\r\n onSave?: (data: DataPublisherSettings | null) => void;\r\n}\r\n\r\nexport default function DataPublishingTab(props: DataPublishingTabProps) {\r\n\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n isLoading: false,\r\n isFormChanged: false,\r\n onSubmitLoading: false,\r\n });\r\n\r\n const [formState] = useState({\r\n publishFinancials: props.data && props.data.config ? props.data.config.publishFinancials : false,\r\n publishTimeline: props.data && props.data.config ? props.data.config.publishTimeline : false,\r\n timeOnly: props.data && props.data.config ? props.data.config.timeOnly : false\r\n });\r\n\r\n // tslint:disable-next-line: no-any\r\n const [uodateDataPublisherMutation] = useMutation(DATA_PUBLISHER_MUTATION);\r\n\r\n // tslint:disable-next-line: no-any\r\n const onFormValueChanged = (changeProps: any) => {\r\n if (!changeProps.pristine) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isFormChanged: true\r\n };\r\n });\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n // const required = (value: any) => {\r\n // return value ? undefined : 'Required';\r\n // };\r\n\r\n const onReset = (form: FormApi) => () => {\r\n form.setConfig('keepDirtyOnReinitialize', false);\r\n form.batch(() => {\r\n form.reset();\r\n });\r\n form.setConfig('keepDirtyOnReinitialize', true);\r\n };\r\n\r\n const onSubmit = (form: FormApi, values: AnyObject) => {\r\n // tslint:disable-next-line: no-console\r\n uodateDataPublisherMutation({\r\n variables: {\r\n publishFinancials: values.publishFinancials,\r\n publishTimeline: values.publishTimeline,\r\n timeOnly: values.timeOnly\r\n }\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n if (props.onSave && props.data) {\r\n const tempData = props.data;\r\n tempData.config.publishFinancials = values.publishFinancials;\r\n tempData.config.publishTimeline = values.publishTimeline;\r\n tempData.config.timeOnly = values.timeOnly;\r\n props.onSave(tempData);\r\n } \r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to update data pushlisher.', reason, 'error');\r\n setState((_prevState) => {\r\n return {\r\n ..._prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n });\r\n };\r\n\r\n return (\r\n
\r\n {state.isLoading ? (\r\n
\r\n \r\n
\r\n ) : (\r\n ) => onSubmit(form, values)} \r\n initialValues={formState}\r\n initialValuesEqual={() => true}\r\n keepDirtyOnReinitialize={true}\r\n subscription={{\r\n submitting: true,\r\n pristine: true\r\n }}\r\n render={({\r\n handleSubmit,\r\n form,\r\n submitting,\r\n pristine,\r\n values\r\n }) => (\r\n
\r\n {\r\n onFormValueChanged(props);\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n }\r\n label=\"Publish Financials\"\r\n />\r\n )}\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n }\r\n label=\"Publish Timeline\"\r\n />\r\n )}\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n }\r\n label=\"timeOnly\"\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n {/* {printJson(values)} */}\r\n
\r\n \r\n )}\r\n />\r\n )}\r\n
\r\n );\r\n}\r\n\r\n// tslint:disable-next-line: no-any\r\nexport function printJson(values: any) {\r\n if (values) {\r\n return (\r\n <>\r\n
\r\n                    {JSON.stringify(values, undefined, 2)}\r\n                
\r\n \r\n );\r\n } else {\r\n return (\r\n <>\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n
\r\n                            {JSON.stringify(values, undefined, 2)}\r\n                            {/*  */}\r\n                        
\r\n )}\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\ninterface DataPublisherSettingsMutationParams {\r\n publishFinancials: boolean;\r\n publishTimeline: boolean;\r\n timeOnly: boolean;\r\n}\r\n\r\nconst DATA_PUBLISHER_MUTATION = gql`\r\n mutation DataPublisherSettingsMutation(\r\n $publishFinancials: Boolean,\r\n $publishTimeline: Boolean,\r\n $timeOnly: Boolean\r\n ) {\r\n applicationSettings {\r\n dataPublisherSettings {\r\n update (\r\n publishFinancials: $publishFinancials,\r\n publishTimeline: $publishTimeline,\r\n timeOnly: $timeOnly\r\n ) {\r\n error\r\n status\r\n }\r\n }\r\n }\r\n }\r\n`;","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport { Button, createStyles, Grid, makeStyles, TextField, Theme } from '@material-ui/core';\r\nimport { FormApi } from 'final-form';\r\nimport gql from 'graphql-tag';\r\nimport React, { useState } from 'react';\r\nimport { useMutation } from 'react-apollo';\r\nimport { AnyObject, Field, Form, FormSpy } from 'react-final-form';\r\nimport { showNotification } from '../../App';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport { Licencing } from '../ApplicationSettingsRepository';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n display: 'flex',\r\n flex: 1,\r\n flexFlow: 'column',\r\n padding: '0 30px',\r\n },\r\n textField: {\r\n width: '100%'\r\n },\r\n buttonWrapper: {\r\n margin: '0 -10px',\r\n width: '100%',\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n '& > button': {\r\n margin: '0 10px',\r\n }\r\n },\r\n loaderWrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n flex: 1,\r\n },\r\n formGroup: {\r\n alignItems: 'flex-start',\r\n '& .MuiFormControlLabel-root': {\r\n marginLeft: 0,\r\n }\r\n }\r\n })\r\n);\r\n\r\ninterface FormState {\r\n internalRegisteredUsers: number | null;\r\n}\r\ninterface LicencingTabState {\r\n isLoading: boolean;\r\n isFormChanged: boolean;\r\n onSubmitLoading: boolean;\r\n}\r\n\r\ninterface LicencingTabProps {\r\n data: Licencing | null;\r\n onSave?: (data: Licencing | null) => void;\r\n}\r\n\r\nexport default function LicencingTab(props: LicencingTabProps) {\r\n\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n isLoading: false,\r\n isFormChanged: false,\r\n onSubmitLoading: false,\r\n });\r\n\r\n const [formState] = useState({\r\n internalRegisteredUsers: props.data && props.data.config ? props.data.config.internalRegisteredUsers : null,\r\n });\r\n\r\n // tslint:disable-next-line: no-any\r\n const [uodateLicencingMutation] = useMutation(LICENCING_MUTATION);\r\n\r\n // tslint:disable-next-line: no-any\r\n const onFormValueChanged = (changeProps: any) => {\r\n if (!changeProps.pristine) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isFormChanged: true\r\n };\r\n });\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n // const required = (value: any) => {\r\n // return value ? undefined : 'Required';\r\n // };\r\n\r\n const onReset = (form: FormApi) => () => {\r\n form.setConfig('keepDirtyOnReinitialize', false);\r\n form.batch(() => {\r\n form.reset();\r\n });\r\n form.setConfig('keepDirtyOnReinitialize', true);\r\n };\r\n\r\n const onSubmit = (form: FormApi, values: AnyObject) => {\r\n // tslint:disable-next-line: no-console\r\n uodateLicencingMutation({\r\n variables: {\r\n internalRegisteredUsers: values.internalRegisteredUsers,\r\n }\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n if (props.onSave && props.data) {\r\n const tempData = props.data;\r\n tempData.config.internalRegisteredUsers = values.internalRegisteredUsers;\r\n props.onSave(tempData);\r\n } \r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to update mobile settings.', reason, 'error');\r\n setState((_prevState) => {\r\n return {\r\n ..._prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n });\r\n };\r\n\r\n return (\r\n
\r\n {state.isLoading ? (\r\n
\r\n \r\n
\r\n ) : (\r\n ) => onSubmit(form, values)} \r\n initialValues={formState}\r\n initialValuesEqual={() => true}\r\n keepDirtyOnReinitialize={true}\r\n subscription={{\r\n submitting: true,\r\n pristine: true\r\n }}\r\n render={({\r\n handleSubmit,\r\n form,\r\n submitting,\r\n pristine,\r\n values\r\n }) => (\r\n
\r\n {\r\n onFormValueChanged(props);\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n {/* {printJson(values)} */}\r\n
\r\n \r\n )}\r\n />\r\n )}\r\n
\r\n );\r\n}\r\n\r\n// tslint:disable-next-line: no-any\r\nexport function printJson(values: any) {\r\n if (values) {\r\n return (\r\n <>\r\n
\r\n                    {JSON.stringify(values, undefined, 2)}\r\n                
\r\n \r\n );\r\n } else {\r\n return (\r\n <>\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n
\r\n                            {JSON.stringify(values, undefined, 2)}\r\n                            {/*  */}\r\n                        
\r\n )}\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\ninterface MobileSettingsMutationParams {\r\n internalRegisteredUsers: boolean;\r\n}\r\n\r\nconst LICENCING_MUTATION = gql`\r\n mutation LicencingMutation(\r\n $internalRegisteredUsers: Int,\r\n ) {\r\n applicationSettings {\r\n licencing {\r\n update (internalRegisteredUsers: $internalRegisteredUsers) {\r\n error\r\n status\r\n }\r\n }\r\n }\r\n }\r\n`;","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport { Button, Checkbox, createStyles, FormControlLabel, FormGroup, Grid, makeStyles, Theme } from '@material-ui/core';\r\nimport { FormApi } from 'final-form';\r\nimport gql from 'graphql-tag';\r\nimport React, { useState } from 'react';\r\nimport { useMutation } from 'react-apollo';\r\nimport { AnyObject, Field, Form, FormSpy } from 'react-final-form';\r\nimport { showNotification } from '../../App';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport { StaffBudgetSettings } from '../ApplicationSettingsRepository';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n display: 'flex',\r\n flex: 1,\r\n flexFlow: 'column',\r\n padding: '0 30px',\r\n },\r\n textField: {\r\n width: '100%'\r\n },\r\n buttonWrapper: {\r\n margin: '0 -10px',\r\n width: '100%',\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n '& > button': {\r\n margin: '0 10px',\r\n }\r\n },\r\n loaderWrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n flex: 1,\r\n },\r\n formGroup: {\r\n alignItems: 'flex-start',\r\n '& .MuiFormControlLabel-root': {\r\n marginLeft: 0,\r\n }\r\n }\r\n })\r\n);\r\n\r\ninterface FormState {\r\n enableBudgetSync: boolean;\r\n}\r\ninterface StaffBudgetsTabState {\r\n isLoading: boolean;\r\n isFormChanged: boolean;\r\n onSubmitLoading: boolean;\r\n}\r\n\r\ninterface StaffBudgetsTabProps {\r\n data: StaffBudgetSettings | null;\r\n onSave?: (data: StaffBudgetSettings | null) => void;\r\n}\r\n\r\nexport default function StaffBudgetsTab(props: StaffBudgetsTabProps) {\r\n\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n isLoading: false,\r\n isFormChanged: false,\r\n onSubmitLoading: false,\r\n });\r\n\r\n const [formState] = useState({\r\n enableBudgetSync: props.data ? props.data!.config.enableBudgetSync : false,\r\n });\r\n\r\n // tslint:disable-next-line: no-any\r\n const [updateStaffBudgetConfig] = useMutation(UPDATE_STAFF_BUDGET_CONFIG_MUTATION);\r\n\r\n // tslint:disable-next-line: no-any\r\n const onFormValueChanged = (changeProps: any) => {\r\n if (!changeProps.pristine) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isFormChanged: true\r\n };\r\n });\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n // const required = (value: any) => {\r\n // return value ? undefined : 'Required';\r\n // };\r\n\r\n const onReset = (form: FormApi) => () => {\r\n form.setConfig('keepDirtyOnReinitialize', false);\r\n form.batch(() => {\r\n form.reset();\r\n });\r\n form.setConfig('keepDirtyOnReinitialize', true);\r\n };\r\n\r\n const onSubmit = (form: FormApi, values: AnyObject) => {\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: true\r\n };\r\n });\r\n\r\n // tslint:disable-next-line: no-console\r\n updateStaffBudgetConfig({\r\n variables: {\r\n enableBudgetSync: values.enableBudgetSync,\r\n }\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n\r\n const initial: FormState = {\r\n enableBudgetSync: values.enableBudgetSync\r\n };\r\n\r\n form.reset(initial);\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n \r\n if (props.onSave && props.data) {\r\n const tempData = props.data;\r\n tempData.config.enableBudgetSync = values.enableBudgetSync;\r\n props.onSave(tempData);\r\n } \r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to update data staff budget settings.', reason, 'error');\r\n setState((_prevState) => {\r\n return {\r\n ..._prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n });\r\n };\r\n\r\n return (\r\n
\r\n {state.isLoading ? (\r\n
\r\n \r\n
\r\n ) : (\r\n ) => onSubmit(form, values)} \r\n initialValues={formState}\r\n initialValuesEqual={() => true}\r\n keepDirtyOnReinitialize={true}\r\n subscription={{\r\n submitting: true,\r\n pristine: true\r\n }}\r\n render={({\r\n handleSubmit,\r\n form,\r\n submitting,\r\n pristine,\r\n values\r\n }) => (\r\n
\r\n {\r\n onFormValueChanged(props);\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n }\r\n label=\"Enable Budget Sync\"\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n {/* {printJson(values)} */}\r\n
\r\n \r\n )}\r\n />\r\n )}\r\n
\r\n );\r\n}\r\n\r\n// tslint:disable-next-line: no-any\r\nexport function printJson(values: any) {\r\n if (values) {\r\n return (\r\n <>\r\n
\r\n                    {JSON.stringify(values, undefined, 2)}\r\n                
\r\n \r\n );\r\n } else {\r\n return (\r\n <>\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n
\r\n                            {JSON.stringify(values, undefined, 2)}\r\n                            {/*  */}\r\n                        
\r\n )}\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nexport interface UpdateStaffBudgetConfigMutationParams {\r\n enableBudgetSync: boolean;\r\n}\r\n\r\nconst UPDATE_STAFF_BUDGET_CONFIG_MUTATION = gql`\r\n mutation updateStaffBudgetConfig($enableBudgetSync: Boolean) {\r\n settings {\r\n staffBudgetConfig {\r\n update (enableBudgetSync: $enableBudgetSync) {\r\n error\r\n status\r\n }\r\n }\r\n }\r\n }\r\n`;","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport { Button, Checkbox, createStyles, FormControlLabel, FormGroup, Grid, makeStyles, Theme } from '@material-ui/core';\r\nimport { FormApi } from 'final-form';\r\nimport gql from 'graphql-tag';\r\nimport React, { useState } from 'react';\r\nimport { useMutation } from 'react-apollo';\r\nimport { AnyObject, Field, Form, FormSpy } from 'react-final-form';\r\nimport { showNotification } from '../../App';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport { FutureTimeSynchronization } from '../ApplicationSettingsRepository';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n display: 'flex',\r\n flex: 1,\r\n flexFlow: 'column',\r\n padding: '0 30px',\r\n },\r\n textField: {\r\n width: '100%'\r\n },\r\n buttonWrapper: {\r\n margin: '0 -10px',\r\n width: '100%',\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n '& > button': {\r\n margin: '0 10px',\r\n }\r\n },\r\n loaderWrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n flex: 1,\r\n },\r\n formGroup: {\r\n alignItems: 'flex-start',\r\n '& .MuiFormControlLabel-root': {\r\n marginLeft: 0,\r\n }\r\n }\r\n })\r\n);\r\n\r\ninterface FormState {\r\n enableFutureTimeSynchronization: boolean;\r\n}\r\n\r\ninterface FutureTimeSynchronizationTabState {\r\n isLoading: boolean;\r\n isFormChanged: boolean;\r\n onSubmitLoading: boolean;\r\n}\r\n\r\ninterface FutureTimeSynchronizationTabProps {\r\n data: FutureTimeSynchronization | null;\r\n onSave?: (data: FutureTimeSynchronization | null) => void;\r\n}\r\n\r\nexport default function FutureTimeSynchronizationTab(props: FutureTimeSynchronizationTabProps) {\r\n\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n isLoading: false,\r\n isFormChanged: false,\r\n onSubmitLoading: false,\r\n });\r\n\r\n const [formState] = useState({\r\n enableFutureTimeSynchronization: props.data ? props.data.enableFutureTimeSynchronization : false\r\n });\r\n\r\n // tslint:disable-next-line: no-any\r\n const [updateStaffBudgetConfig] = useMutation(FUTURE_TIME_SYNCHRONIZE_MUTATION);\r\n\r\n // tslint:disable-next-line: no-any\r\n const onFormValueChanged = (changeProps: any) => {\r\n if (!changeProps.pristine) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isFormChanged: true\r\n };\r\n });\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n // const required = (value: any) => {\r\n // return value ? undefined : 'Required';\r\n // };\r\n\r\n const onReset = (form: FormApi) => () => {\r\n form.setConfig('keepDirtyOnReinitialize', false);\r\n form.batch(() => {\r\n form.reset();\r\n });\r\n form.setConfig('keepDirtyOnReinitialize', true);\r\n };\r\n\r\n const onSubmit = (form: FormApi, values: AnyObject) => {\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: true\r\n };\r\n });\r\n\r\n // tslint:disable-next-line: no-console\r\n updateStaffBudgetConfig({\r\n variables: {\r\n enableFutureTimeSynchronization: values.enableFutureTimeSynchronization,\r\n }\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n\r\n const initial: FormState = {\r\n enableFutureTimeSynchronization: values.enableFutureTimeSynchronization\r\n };\r\n\r\n form.reset(initial);\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n \r\n if (props.onSave && props.data) {\r\n const tempData = props.data;\r\n tempData.enableFutureTimeSynchronization = values.enableFutureTimeSynchronization;\r\n props.onSave(tempData);\r\n } \r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to update data staff budget settings.', reason, 'error');\r\n setState((_prevState) => {\r\n return {\r\n ..._prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n });\r\n };\r\n\r\n return (\r\n
\r\n {state.isLoading ? (\r\n
\r\n \r\n
\r\n ) : (\r\n ) => onSubmit(form, values)} \r\n initialValues={formState}\r\n initialValuesEqual={() => true}\r\n keepDirtyOnReinitialize={true}\r\n subscription={{\r\n submitting: true,\r\n pristine: true\r\n }}\r\n render={({\r\n handleSubmit,\r\n form,\r\n submitting,\r\n pristine,\r\n values\r\n }) => (\r\n
\r\n {\r\n onFormValueChanged(props);\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n }\r\n label=\"Enable Future Time Synchronisation\"\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n {/* {printJson(values)} */}\r\n
\r\n \r\n )}\r\n />\r\n )}\r\n
\r\n );\r\n}\r\n\r\n// tslint:disable-next-line: no-any\r\nexport function printJson(values: any) {\r\n if (values) {\r\n return (\r\n <>\r\n
\r\n                    {JSON.stringify(values, undefined, 2)}\r\n                
\r\n \r\n );\r\n } else {\r\n return (\r\n <>\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n
\r\n                            {JSON.stringify(values, undefined, 2)}\r\n                            {/*  */}\r\n                        
\r\n )}\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nexport interface FutureTimeSynchronoizeMutationParams {\r\n enableFutureTimeSynchronization: boolean;\r\n}\r\n\r\nconst FUTURE_TIME_SYNCHRONIZE_MUTATION = gql`\r\n mutation futureTimeSynchronization($enableFutureTimeSynchronization: Boolean) {\r\n applicationSettings {\r\n futureTimeSynchronization {\r\n update (enableFutureTimeSynchronization: $enableFutureTimeSynchronization) {\r\n error\r\n status\r\n }\r\n }\r\n }\r\n }\r\n`;","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport { Button, createStyles, FormControlLabel, FormGroup, Grid, makeStyles, Switch, Theme } from '@material-ui/core';\r\nimport { FormApi } from 'final-form';\r\nimport gql from 'graphql-tag';\r\nimport React, { useState } from 'react';\r\nimport { useMutation } from 'react-apollo';\r\nimport { AnyObject, Field, Form, FormSpy } from 'react-final-form';\r\nimport { showNotification } from '../../App';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport { TaskPublisherSettings } from '../ApplicationSettingsRepository';\r\nimport { useTenant } from '../../hooks/useTenant';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n display: 'flex',\r\n flex: 1,\r\n flexFlow: 'column',\r\n padding: '0 30px',\r\n },\r\n textField: {\r\n width: '100%'\r\n },\r\n buttonWrapper: {\r\n margin: '0 -10px',\r\n width: '100%',\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n '& > button': {\r\n margin: '0 10px',\r\n }\r\n },\r\n loaderWrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n flex: 1,\r\n },\r\n formGroup: {\r\n alignItems: 'flex-start',\r\n '& .MuiFormControlLabel-root': {\r\n marginLeft: 0,\r\n }\r\n }\r\n })\r\n);\r\n\r\ninterface FormState {\r\n publishTasks: boolean;\r\n}\r\ninterface TaskPublishingTabState {\r\n isLoading: boolean;\r\n isFormChanged: boolean;\r\n onSubmitLoading: boolean;\r\n}\r\n\r\ninterface TaskPublisherTabProps {\r\n data: TaskPublisherSettings | null;\r\n onSave?: (data: TaskPublisherSettings | null) => void;\r\n}\r\n\r\nexport default function TaskPublishingTab(props: TaskPublisherTabProps) {\r\n\r\n const classes = useStyles();\r\n\r\n const tenant = useTenant();\r\n\r\n const [state, setState] = useState({\r\n isLoading: false,\r\n isFormChanged: false,\r\n onSubmitLoading: false,\r\n });\r\n\r\n const [formState] = useState({\r\n publishTasks: props.data && props.data.config ? props.data.config.publishTasks : false,\r\n });\r\n\r\n // tslint:disable-next-line: no-any\r\n const [updateTaskPublishingMutation] = useMutation(TASK_PUBLISHING_MUTATION);\r\n\r\n // tslint:disable-next-line: no-any\r\n const onFormValueChanged = (changeProps: any) => {\r\n if (!changeProps.pristine) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isFormChanged: true\r\n };\r\n });\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n // const required = (value: any) => {\r\n // return value ? undefined : 'Required';\r\n // };\r\n\r\n const onReset = (form: FormApi) => () => {\r\n form.setConfig('keepDirtyOnReinitialize', false);\r\n form.batch(() => {\r\n form.reset();\r\n });\r\n form.setConfig('keepDirtyOnReinitialize', true);\r\n };\r\n\r\n const onSubmit = (form: FormApi, values: AnyObject) => {\r\n\r\n // tslint:disable-next-line: no-console\r\n updateTaskPublishingMutation({\r\n variables: {\r\n publishTasks: values.publishTasks,\r\n }\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n \r\n if (props.onSave && props.data) {\r\n const tempData = props.data;\r\n tempData.config.publishTasks = values.publishTasks;\r\n props.onSave(tempData);\r\n }\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to update task publisher.', reason, 'error');\r\n setState((_prevState) => {\r\n return {\r\n ..._prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n });\r\n };\r\n\r\n if (state.isLoading || tenant.loading) {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n } \r\n\r\n return (\r\n
\r\n ) => onSubmit(form, values)} \r\n initialValues={formState}\r\n initialValuesEqual={() => true}\r\n keepDirtyOnReinitialize={true}\r\n subscription={{\r\n submitting: true,\r\n pristine: true\r\n }}\r\n render={({\r\n handleSubmit,\r\n form,\r\n submitting,\r\n pristine,\r\n values\r\n }) => (\r\n
\r\n {\r\n onFormValueChanged(props);\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n }\r\n label=\"Publish Tasks\"\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n {/* {printJson(values)} */}\r\n
\r\n \r\n )}\r\n />\r\n
\r\n );\r\n}\r\n\r\n// tslint:disable-next-line: no-any\r\nexport function printJson(values: any) {\r\n if (values) {\r\n return (\r\n <>\r\n
\r\n                    {JSON.stringify(values, undefined, 2)}\r\n                
\r\n \r\n );\r\n } else {\r\n return (\r\n <>\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n
\r\n                            {JSON.stringify(values, undefined, 2)}\r\n                            {/*  */}\r\n                        
\r\n )}\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\ninterface TaskPublishingMutationParams {\r\n publishTasks: boolean;\r\n}\r\n\r\nconst TASK_PUBLISHING_MUTATION = gql`\r\n mutation TaskPublishingMutation($publishTasks: Boolean) {\r\n applicationSettings {\r\n taskPublisherSettings {\r\n update(publishTasks: $publishTasks) {\r\n error\r\n status\r\n }\r\n }\r\n }\r\n }\r\n`;","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport { Button, Checkbox, createStyles, FormControlLabel, FormGroup, Grid, makeStyles, Theme } from '@material-ui/core';\r\nimport { FormApi } from 'final-form';\r\nimport gql from 'graphql-tag';\r\nimport React, { useState } from 'react';\r\nimport { useMutation } from 'react-apollo';\r\nimport { AnyObject, Field, Form, FormSpy } from 'react-final-form';\r\nimport { showNotification } from '../../App';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport { ClientNotesSettings } from '../ApplicationSettingsRepository';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n display: 'flex',\r\n flex: 1,\r\n flexFlow: 'column',\r\n padding: '0 30px',\r\n },\r\n textField: {\r\n width: '100%'\r\n },\r\n buttonWrapper: {\r\n margin: '0 -10px',\r\n width: '100%',\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n '& > button': {\r\n margin: '0 10px',\r\n }\r\n },\r\n loaderWrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n flex: 1,\r\n },\r\n formGroup: {\r\n alignItems: 'flex-start',\r\n '& .MuiFormControlLabel-root': {\r\n marginLeft: 0,\r\n }\r\n }\r\n })\r\n);\r\n\r\ninterface FormState {\r\n enableClientNotesSync: boolean;\r\n}\r\ninterface ClientNotesTabState {\r\n isLoading: boolean;\r\n isFormChanged: boolean;\r\n onSubmitLoading: boolean;\r\n}\r\n\r\ninterface ClientNotesTabProps {\r\n data: ClientNotesSettings | null;\r\n onSave?: (data: ClientNotesSettings | null) => void;\r\n}\r\n\r\nexport default function ClientNotesTab(props: ClientNotesTabProps) {\r\n\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n isLoading: false,\r\n isFormChanged: false,\r\n onSubmitLoading: false,\r\n });\r\n\r\n const [formState] = useState({\r\n enableClientNotesSync: props.data ? props.data!.config.enableClientNotesSync : false,\r\n });\r\n\r\n // tslint:disable-next-line: no-any\r\n const [updateStaffBudgetConfig] = useMutation(UpdateClientNotesConfigMutation);\r\n\r\n // tslint:disable-next-line: no-any\r\n const onFormValueChanged = (changeProps: any) => {\r\n if (!changeProps.pristine) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isFormChanged: true\r\n };\r\n });\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n // const required = (value: any) => {\r\n // return value ? undefined : 'Required';\r\n // };\r\n\r\n const onReset = (form: FormApi) => () => {\r\n form.setConfig('keepDirtyOnReinitialize', false);\r\n form.batch(() => {\r\n form.reset();\r\n });\r\n form.setConfig('keepDirtyOnReinitialize', true);\r\n };\r\n\r\n const onSubmit = (form: FormApi, values: AnyObject) => {\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: true\r\n };\r\n });\r\n\r\n // tslint:disable-next-line: no-console\r\n updateStaffBudgetConfig({\r\n variables: {\r\n enableClientNotesSync: values.enableClientNotesSync,\r\n }\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n\r\n const initial: FormState = {\r\n enableClientNotesSync: values.enableClientNotesSync\r\n };\r\n\r\n form.reset(initial);\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n \r\n if (props.onSave && props.data) {\r\n const tempData = props.data;\r\n tempData.config.enableClientNotesSync = values.enableClientNotesSync;\r\n props.onSave(tempData);\r\n } \r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to update data client notes settings.', reason, 'error');\r\n setState((_prevState) => {\r\n return {\r\n ..._prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n });\r\n };\r\n\r\n return (\r\n
\r\n {state.isLoading ? (\r\n
\r\n \r\n
\r\n ) : (\r\n ) => onSubmit(form, values)} \r\n initialValues={formState}\r\n initialValuesEqual={() => true}\r\n keepDirtyOnReinitialize={true}\r\n subscription={{\r\n submitting: true,\r\n pristine: true\r\n }}\r\n render={({\r\n handleSubmit,\r\n form,\r\n submitting,\r\n pristine,\r\n values\r\n }) => (\r\n
\r\n {\r\n onFormValueChanged(props);\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n }\r\n label=\"Enable Client Notes Sync\"\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n {/* {printJson(values)} */}\r\n
\r\n \r\n )}\r\n />\r\n )}\r\n
\r\n );\r\n}\r\n\r\n// tslint:disable-next-line: no-any\r\nexport function printJson(values: any) {\r\n if (values) {\r\n return (\r\n <>\r\n
\r\n                    {JSON.stringify(values, undefined, 2)}\r\n                
\r\n \r\n );\r\n } else {\r\n return (\r\n <>\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n
\r\n                            {JSON.stringify(values, undefined, 2)}\r\n                            {/*  */}\r\n                        
\r\n )}\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nexport interface UpdateClientNotesConfigMutationParams {\r\n enableClientNotesSync: boolean;\r\n}\r\n\r\nconst UpdateClientNotesConfigMutation = gql`\r\n mutation updateClientNotesConfig($enableClientNotesSync: Boolean) {\r\n settings {\r\n clientNotesConfig {\r\n update(enableClientNotesSync: $enableClientNotesSync) {\r\n error\r\n status\r\n }\r\n }\r\n }\r\n } \r\n`;","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport { Button, createStyles, Grid, makeStyles, TextField, Theme } from '@material-ui/core';\r\nimport { FormApi } from 'final-form';\r\nimport gql from 'graphql-tag';\r\nimport React, { useState } from 'react';\r\nimport { useMutation } from 'react-apollo';\r\nimport { AnyObject, Field, Form, FormSpy } from 'react-final-form';\r\nimport { showNotification } from '../../App';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport { LabelSettings } from '../ApplicationSettingsRepository';\r\nimport { LocalStorageEnum } from '../../enums/LocalStorageEnum';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n display: 'flex',\r\n flex: 1,\r\n flexFlow: 'column',\r\n padding: '0 30px',\r\n },\r\n textField: {\r\n width: '100%'\r\n },\r\n buttonWrapper: {\r\n margin: '0 -10px',\r\n width: '100%',\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n '& > button': {\r\n margin: '0 10px',\r\n }\r\n },\r\n loaderWrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n flex: 1,\r\n },\r\n formGroup: {\r\n alignItems: 'flex-start',\r\n '& .MuiFormControlLabel-root': {\r\n marginLeft: 0,\r\n }\r\n }\r\n })\r\n);\r\n\r\ninterface FormState {\r\n personActingLabel: string | null | undefined;\r\n personResponsibleLabel: string | null | undefined;\r\n}\r\ninterface LabelSettingsTabState {\r\n isLoading: boolean;\r\n isFormChanged: boolean;\r\n onSubmitLoading: boolean;\r\n}\r\n\r\ninterface LabelSettingsTabProps {\r\n data: LabelSettings | null;\r\n onSave?: (data: LabelSettings | null) => void;\r\n}\r\n\r\nexport default function LabelSettingsTab(props: LabelSettingsTabProps) {\r\n\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n isLoading: false,\r\n isFormChanged: false,\r\n onSubmitLoading: false,\r\n });\r\n\r\n const [formState] = useState({\r\n personActingLabel: props.data?.config.personActingLabel,\r\n personResponsibleLabel: props.data?.config.personResponsibleLabel,\r\n });\r\n\r\n // tslint:disable-next-line: no-any\r\n const [updateLabelSettings] = useMutation(LabelSettingsMutation);\r\n\r\n // tslint:disable-next-line: no-any\r\n const onFormValueChanged = (changeProps: any) => {\r\n if (!changeProps.pristine) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isFormChanged: true\r\n };\r\n });\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n // const required = (value: any) => {\r\n // return value ? undefined : 'Required';\r\n // };\r\n\r\n const onReset = (form: FormApi) => () => {\r\n form.setConfig('keepDirtyOnReinitialize', false);\r\n form.batch(() => {\r\n form.reset();\r\n });\r\n form.setConfig('keepDirtyOnReinitialize', true);\r\n };\r\n\r\n const onSubmit = (form: FormApi, values: AnyObject) => {\r\n // console.log('submit');\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: true,\r\n };\r\n });\r\n\r\n updateLabelSettings({\r\n variables: {\r\n personActingLabel: values.personActingLabel, \r\n personResponsibleLabel: values.personResponsibleLabel\r\n }\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n\r\n form.setConfig('keepDirtyOnReinitialize', false);\r\n\r\n localStorage.setItem(LocalStorageEnum.PersonResponsible, values.personResponsibleLabel);\r\n localStorage.setItem(LocalStorageEnum.PersonActing, values.personActingLabel);\r\n \r\n const tempInitial: FormState = {\r\n personActingLabel: values.personActingLabel,\r\n personResponsibleLabel: values.personResponsibleLabel\r\n };\r\n\r\n form.batch(() => {\r\n form.reset(tempInitial);\r\n });\r\n \r\n form.setConfig('keepDirtyOnReinitialize', true);\r\n\r\n setState((_prevState) => {\r\n return {\r\n ..._prevState,\r\n onSubmitLoading: false,\r\n };\r\n });\r\n\r\n if (props.onSave && props.data) {\r\n const tempData = props.data;\r\n tempData.config.personActingLabel = values.personActingLabel;\r\n tempData.config.personResponsibleLabel = values.personResponsibleLabel;\r\n props.onSave(tempData);\r\n } \r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to update application security settings', reason, 'error');\r\n setState((_prevState) => {\r\n return {\r\n ..._prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n });\r\n };\r\n\r\n return (\r\n
\r\n {state.isLoading ? (\r\n
\r\n \r\n
\r\n ) : (\r\n ) => onSubmit(form, values)} \r\n initialValues={formState}\r\n initialValuesEqual={() => true}\r\n keepDirtyOnReinitialize={true}\r\n subscription={{\r\n submitting: true,\r\n pristine: true\r\n }}\r\n render={({\r\n handleSubmit,\r\n form,\r\n submitting,\r\n pristine,\r\n values\r\n }) => (\r\n
\r\n {\r\n onFormValueChanged(props);\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n {/* {printJson(values)} */}\r\n
\r\n \r\n )}\r\n />\r\n )}\r\n
\r\n );\r\n}\r\n\r\n// tslint:disable-next-line: no-any\r\nexport function printJson(values: any) {\r\n if (values) {\r\n return (\r\n <>\r\n
\r\n                    {JSON.stringify(values, undefined, 2)}\r\n                
\r\n \r\n );\r\n } else {\r\n return (\r\n <>\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n
\r\n                            {JSON.stringify(values, undefined, 2)}\r\n                            {/*  */}\r\n                        
\r\n )}\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\ninterface LabelSettingsMutationParams {\r\n personActingLabel: string | null;\r\n personResponsibleLabel: string | null;\r\n}\r\n\r\nconst LabelSettingsMutation = gql`\r\n mutation UpdateLabelSettings ($personActingLabel: String, $personResponsibleLabel: String){\r\n applicationSettings {\r\n labelSettings {\r\n update (personActingLabel: $personActingLabel, personResponsibleLabel: $personResponsibleLabel) {\r\n error\r\n status\r\n }\r\n }\r\n }\r\n }\r\n`;","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport { Button, createStyles, FormGroup, Grid, makeStyles, TextField, Theme } from '@material-ui/core';\r\nimport { FormApi } from 'final-form';\r\nimport gql from 'graphql-tag';\r\nimport React, { useState } from 'react';\r\nimport { useMutation } from 'react-apollo';\r\nimport { AnyObject, Field, Form, FormSpy } from 'react-final-form';\r\nimport { showNotification } from '../../App';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport { SystemOptions } from '../ApplicationSettingsRepository';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n display: 'flex',\r\n flex: 1,\r\n flexFlow: 'column',\r\n padding: '0 30px',\r\n },\r\n textField: {\r\n width: '100%'\r\n },\r\n buttonWrapper: {\r\n margin: '0 -10px',\r\n width: '100%',\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n '& > button': {\r\n margin: '0 10px',\r\n }\r\n },\r\n loaderWrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n flex: 1,\r\n },\r\n formGroup: {\r\n alignItems: 'flex-start',\r\n '& .MuiFormControlLabel-root': {\r\n marginLeft: 0,\r\n }\r\n }\r\n })\r\n);\r\n\r\ninterface FormState {\r\n emailSizeLimit: number | null;\r\n}\r\ninterface SystemOptionsTabState {\r\n isLoading: boolean;\r\n isFormChanged: boolean;\r\n onSubmitLoading: boolean;\r\n}\r\n\r\ninterface SystemOptionsTabProps {\r\n data: SystemOptions | null;\r\n onSave?: (data: SystemOptions | null) => void;\r\n}\r\n\r\nexport default function SystemOptionsTab(props: SystemOptionsTabProps) {\r\n\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n isLoading: false,\r\n isFormChanged: false,\r\n onSubmitLoading: false,\r\n });\r\n\r\n const [formState] = useState({\r\n emailSizeLimit: props.data ? props.data!.config.emailSizeLimit : null,\r\n });\r\n\r\n // tslint:disable-next-line: no-any\r\n const [updateSystemOptionConfig] = useMutation(UpdateSystemOptionConfigMutation);\r\n\r\n // tslint:disable-next-line: no-any\r\n const onFormValueChanged = (changeProps: any) => {\r\n if (!changeProps.pristine) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isFormChanged: true\r\n };\r\n });\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n // const required = (value: any) => {\r\n // return value ? undefined : 'Required';\r\n // };\r\n\r\n const onReset = (form: FormApi) => () => {\r\n form.setConfig('keepDirtyOnReinitialize', false);\r\n form.batch(() => {\r\n form.reset();\r\n });\r\n form.setConfig('keepDirtyOnReinitialize', true);\r\n };\r\n\r\n const onSubmit = (form: FormApi, values: AnyObject) => {\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: true\r\n };\r\n });\r\n\r\n // tslint:disable-next-line: no-console\r\n updateSystemOptionConfig({\r\n variables: {\r\n emailSizeLimit: values.emailSizeLimit,\r\n }\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n\r\n const initial: FormState = {\r\n emailSizeLimit: values.emailSizeLimit\r\n };\r\n\r\n form.reset(initial);\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n \r\n if (props.onSave && props.data) {\r\n const tempData = props.data;\r\n tempData.config.emailSizeLimit = values.emailSizeLimit;\r\n props.onSave(tempData);\r\n } \r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to update data system options.', reason, 'error');\r\n setState((_prevState) => {\r\n return {\r\n ..._prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n });\r\n };\r\n\r\n return (\r\n
\r\n {state.isLoading ? (\r\n
\r\n \r\n
\r\n ) : (\r\n ) => onSubmit(form, values)} \r\n initialValues={formState}\r\n initialValuesEqual={() => true}\r\n keepDirtyOnReinitialize={true}\r\n subscription={{\r\n submitting: true,\r\n pristine: true\r\n }}\r\n render={({\r\n handleSubmit,\r\n form,\r\n submitting,\r\n pristine,\r\n values\r\n }) => (\r\n
\r\n {\r\n onFormValueChanged(props);\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n {/* {printJson(values)} */}\r\n
\r\n \r\n )}\r\n />\r\n )}\r\n
\r\n );\r\n}\r\n\r\n// tslint:disable-next-line: no-any\r\nexport function printJson(values: any) {\r\n if (values) {\r\n return (\r\n <>\r\n
\r\n                    {JSON.stringify(values, undefined, 2)}\r\n                
\r\n \r\n );\r\n } else {\r\n return (\r\n <>\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n
\r\n                            {JSON.stringify(values, undefined, 2)}\r\n                            {/*  */}\r\n                        
\r\n )}\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nexport interface UpdateSystemConfigMutationParams {\r\n emailSizeLimit: number;\r\n}\r\n\r\nconst UpdateSystemOptionConfigMutation = gql`\r\n mutation updateSystemOptionConfig($emailSizeLimit: Int) {\r\n applicationSettings {\r\n systemOptions {\r\n update(emailSizeLimit: $emailSizeLimit) {\r\n status\r\n }\r\n }\r\n }\r\n }\r\n`;","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport { Button, Checkbox, createStyles, FormControlLabel, FormGroup, Grid, makeStyles, Switch, Theme } from '@material-ui/core';\r\nimport { FormApi } from 'final-form';\r\nimport gql from 'graphql-tag';\r\nimport React, { useState } from 'react';\r\nimport { useMutation } from 'react-apollo';\r\nimport { Field, FieldInputProps, Form, FormSpy } from 'react-final-form';\r\nimport { showNotification } from '../../App';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport { ClientNotesSettings, DocumentPublisherSettings, FutureTimeSynchronization, StaffBudgetSettings, TaskPublisherSettings } from '../ApplicationSettingsRepository';\r\nimport { useTenant } from '../../hooks/useTenant';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n display: 'flex',\r\n flex: 1,\r\n flexFlow: 'column',\r\n padding: '0 30px',\r\n },\r\n textField: {\r\n width: '100%'\r\n },\r\n buttonWrapper: {\r\n margin: '0 -10px',\r\n width: '100%',\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n '& > button': {\r\n margin: '0 10px',\r\n }\r\n },\r\n loaderWrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n flex: 1,\r\n },\r\n formGroup: {\r\n alignItems: 'flex-start',\r\n '& .MuiFormControlLabel-root': {\r\n marginLeft: 0,\r\n }\r\n }\r\n })\r\n);\r\n\r\ninterface FormState {\r\n enableClientNotesSync: boolean;\r\n publishDocuments: boolean;\r\n publishDocumentFolders: boolean;\r\n enableFutureTimeSynchronization: boolean;\r\n enableBudgetSync: boolean;\r\n publishTasks: boolean;\r\n}\r\ninterface ClientNotesTabState {\r\n isLoading: boolean;\r\n isFormChanged: boolean;\r\n onSubmitLoading: boolean;\r\n}\r\n\r\ninterface ClientNotesTabProps {\r\n clinetNotesData: ClientNotesSettings | null;\r\n documentPublisherData: DocumentPublisherSettings | null;\r\n futureTimeSynchronizationData: FutureTimeSynchronization | null;\r\n staffBudgetSettingsData: StaffBudgetSettings | null;\r\n taskPublisherSettingsData: TaskPublisherSettings | null;\r\n onSave?: (\r\n clinetNotesData: ClientNotesSettings | null, \r\n documentPublisherData: DocumentPublisherSettings | null, \r\n futureTimeSynchronizationData: FutureTimeSynchronization | null,\r\n staffBudgetSettingsData: StaffBudgetSettings | null,\r\n taskPublisherSettingsData: TaskPublisherSettings | null\r\n ) => void;\r\n}\r\n\r\nexport default function ClientNotesTab(props: ClientNotesTabProps) {\r\n\r\n const classes = useStyles();\r\n\r\n const tenant = useTenant();\r\n\r\n const [state, setState] = useState({\r\n isLoading: false,\r\n isFormChanged: false,\r\n onSubmitLoading: false,\r\n });\r\n\r\n const [formState] = useState({\r\n enableClientNotesSync: props.clinetNotesData ? props.clinetNotesData!.config.enableClientNotesSync : false,\r\n publishDocuments: props.documentPublisherData && props.documentPublisherData.config ? props.documentPublisherData.config.publishDocuments : false,\r\n publishDocumentFolders: props.documentPublisherData && props.documentPublisherData.config ? props.documentPublisherData.config.publishDocumentFolders : false,\r\n enableFutureTimeSynchronization: props.futureTimeSynchronizationData ? props.futureTimeSynchronizationData.enableFutureTimeSynchronization : false,\r\n enableBudgetSync: props.staffBudgetSettingsData ? props.staffBudgetSettingsData.config.enableBudgetSync : false,\r\n publishTasks: props.taskPublisherSettingsData ? props.taskPublisherSettingsData.config.publishTasks : false,\r\n });\r\n\r\n // tslint:disable-next-line: no-any\r\n const [updatePublishingAndSnycConfig] = useMutation(UpdatePublishingAndSyncSettingsQuery);\r\n\r\n // tslint:disable-next-line: no-any\r\n const onFormValueChanged = (changeProps: any) => {\r\n if (!changeProps.pristine) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isFormChanged: true\r\n };\r\n });\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n // const required = (value: any) => {\r\n // return value ? undefined : 'Required';\r\n // };\r\n\r\n const onReset = (form: FormApi) => () => {\r\n form.setConfig('keepDirtyOnReinitialize', false);\r\n form.batch(() => {\r\n form.reset();\r\n });\r\n form.setConfig('keepDirtyOnReinitialize', true);\r\n };\r\n\r\n const onSubmit = (form: FormApi, values: FormState) => {\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: true\r\n };\r\n });\r\n\r\n // tslint:disable-next-line: no-console\r\n updatePublishingAndSnycConfig({\r\n variables: {\r\n enableClientNotesSync: values.enableClientNotesSync,\r\n publishDocuments: values.publishDocuments,\r\n enableFutureTimeSynchronization: values.enableFutureTimeSynchronization,\r\n publishDocumentFolders: values.publishDocumentFolders,\r\n enableBudgetSync: values.enableBudgetSync,\r\n publishTasks: values.publishTasks\r\n }\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n\r\n const initial: FormState = {\r\n enableClientNotesSync: values.enableClientNotesSync,\r\n publishDocuments: values.publishDocuments,\r\n publishDocumentFolders: values.publishDocumentFolders,\r\n enableFutureTimeSynchronization: values.enableFutureTimeSynchronization,\r\n enableBudgetSync: values.enableBudgetSync,\r\n publishTasks: values.publishTasks\r\n };\r\n\r\n form.reset(initial);\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n \r\n if (props.onSave && props.clinetNotesData && props.documentPublisherData && props.futureTimeSynchronizationData) {\r\n const tempClientNotesData = props.clinetNotesData;\r\n tempClientNotesData.config.enableClientNotesSync = values.enableClientNotesSync;\r\n\r\n const tempDocumentPublisherData = props.documentPublisherData;\r\n tempDocumentPublisherData.config.publishDocuments = values.publishDocuments;\r\n tempDocumentPublisherData.config.publishDocumentFolders = values.publishDocumentFolders;\r\n\r\n const tempFutureTimeSynchronizationData = props.futureTimeSynchronizationData;\r\n tempFutureTimeSynchronizationData.enableFutureTimeSynchronization = values.enableFutureTimeSynchronization;\r\n\r\n const tempStaffBudgetSettingsData = props.staffBudgetSettingsData;\r\n tempStaffBudgetSettingsData!.config.enableBudgetSync = values.enableBudgetSync;\r\n\r\n const tempTaskPublisherSettingsData = props.taskPublisherSettingsData;\r\n tempTaskPublisherSettingsData!.config.publishTasks = values.publishTasks;\r\n\r\n props.onSave(\r\n tempClientNotesData, \r\n tempDocumentPublisherData, \r\n tempFutureTimeSynchronizationData,\r\n tempStaffBudgetSettingsData,\r\n tempTaskPublisherSettingsData\r\n );\r\n } \r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to update data client notes settings.', reason, 'error');\r\n setState((_prevState) => {\r\n return {\r\n ..._prevState,\r\n onSubmitLoading: false\r\n };\r\n });\r\n });\r\n };\r\n\r\n const onChangge = (input: FieldInputProps, form: FormApi) => (event: React.ChangeEvent, checked: boolean) => {\r\n \r\n input.onChange(checked);\r\n\r\n if (!checked) { form.change('publishDocumentFolders', false); }\r\n };\r\n \r\n const sourceSystem = tenant.data?.tenant.sourceSystem === 'PracticeEvolve';\r\n\r\n return (\r\n
\r\n {state.isLoading ? (\r\n
\r\n \r\n
\r\n ) : (\r\n ) => onSubmit(form, values)} \r\n initialValues={formState}\r\n initialValuesEqual={() => true}\r\n keepDirtyOnReinitialize={true}\r\n subscription={{\r\n submitting: true,\r\n pristine: true\r\n }}\r\n render={({\r\n handleSubmit,\r\n form,\r\n submitting,\r\n pristine,\r\n values\r\n }) => (\r\n
\r\n {\r\n onFormValueChanged(props);\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n }\r\n label=\"Enable Budget Sync\"\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n }\r\n label=\"Publish Documents\"\r\n />\r\n )}\r\n \r\n {sourceSystem ? (\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n \r\n {({ input, meta }) => (\r\n \r\n }\r\n label=\"Publish Document Folders\"\r\n />\r\n )}\r\n \r\n )}\r\n \r\n ) : undefined}\r\n \r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n }\r\n label=\"Publish Tasks\"\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n }\r\n label=\"Enable Future Time Synchronisation\"\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n }\r\n label=\"Enable Client Notes Sync\"\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n {/* {printJson(values)} */}\r\n
\r\n \r\n )}\r\n />\r\n )}\r\n
\r\n );\r\n}\r\n\r\n// tslint:disable-next-line: no-any\r\nexport function printJson(values: any) {\r\n if (values) {\r\n return (\r\n <>\r\n
\r\n                    {JSON.stringify(values, undefined, 2)}\r\n                
\r\n \r\n );\r\n } else {\r\n return (\r\n <>\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n
\r\n                            {JSON.stringify(values, undefined, 2)}\r\n                            {/*  */}\r\n                        
\r\n )}\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\ntype UpdatePublishingAndSyncSettingsData = {\r\n applicationSettings: ApplicationSettings;\r\n};\r\n\r\ntype ApplicationSettings = {\r\n publishingAndSyncSettings: PublishingAndSyncSettings;\r\n};\r\n\r\ntype PublishingAndSyncSettings = {\r\n update: Update;\r\n};\r\n\r\ntype Update = {\r\n error: null;\r\n status: boolean;\r\n};\r\n\r\ntype UpdatePublishingAndSyncSettingsParams = {\r\n enableClientNotesSync: boolean;\r\n publishDocuments: boolean;\r\n publishDocumentFolders: boolean;\r\n enableFutureTimeSynchronization: boolean;\r\n enableBudgetSync: boolean;\r\n publishTasks: boolean;\r\n};\r\n\r\nconst UpdatePublishingAndSyncSettingsQuery = gql`\r\n mutation UpdatePublishingAndSyncSettings(\r\n $enableClientNotesSync: Boolean\r\n $publishDocuments: Boolean\r\n $publishDocumentFolders: Boolean\r\n $enableFutureTimeSynchronization: Boolean\r\n $enableBudgetSync: Boolean\r\n $publishTasks: Boolean\r\n ) {\r\n applicationSettings {\r\n publishingAndSyncSettings {\r\n update(\r\n enableClientNotesSync: $enableClientNotesSync\r\n publishDocuments: $publishDocuments\r\n publishDocumentFolders: $publishDocumentFolders\r\n enableFutureTimeSynchronization: $enableFutureTimeSynchronization\r\n enableBudgetSync: $enableBudgetSync\r\n publishTasks: $publishTasks\r\n ) {\r\n error\r\n status\r\n }\r\n }\r\n }\r\n }\r\n`;","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState, useEffect } from 'react';\r\nimport List from '@material-ui/core/List';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport ListItemText from '@material-ui/core/ListItemText';\r\nimport { RouterProps, showNotification } from '../App';\r\nimport ListItemAvatar from '@material-ui/core/ListItemAvatar';\r\nimport SettingsIcon from '@material-ui/icons/Settings';\r\nimport Avatar from '@material-ui/core/Avatar';\r\nimport { makeStyles } from '@material-ui/core';\r\nimport { RvLoader } from '../components/Loader';\r\nimport { client } from '..';\r\n// tslint:disable-next-line: max-line-length\r\nimport { ApplicationSettingsData, ClientNotesSettings, DataPublisherSettings, DocumentPublisherSettings, FutureTimeSynchronization, LabelSettings, Licencing, MobileSettings, retrieveApplicationSettingsData, SettingName, StaffBudgetSettings, SystemOptions, TaskPublisherSettings } from './ApplicationSettingsRepository';\r\nimport { FirmSettingConfigurationBanner } from '../firmSettingConfiguration/FirmSettingConfigurationBanner';\r\nimport { SettingNotificationSubscription } from '../firmSettingConfiguration/FirmSettingConfigurationRepository';\r\nimport DocumentPublishingTab from './tabs/DocumentPublishingTab';\r\nimport InsertDriveFileIcon from '@material-ui/icons/InsertDriveFile';\r\nimport VpnKeyIcon from '@material-ui/icons/VpnKey';\r\n// import PhonelinkSetupIcon from '@material-ui/icons/PhonelinkSetup';\r\n// import RVMobileTab from './tabs/RVMobileTab';\r\nimport DataPublishingTab from './tabs/DataPublishingTab';\r\nimport LicencingTab from './tabs/LicencingTab';\r\nimport StaffBudgetsTab from './tabs/StaffBudgetsTab';\r\nimport ReorderIcon from '@material-ui/icons/Reorder';\r\nimport FutureTimeSynchronizationTab from './tabs/FutureTimeSynchronizationTab';\r\nimport UpdateOutlinedIcon from '@material-ui/icons/UpdateOutlined';\r\nimport TaskPublishingTab from './tabs/TaskPublishingTab';\r\nimport ClientNotesTab from './tabs/ClientNotesTab';\r\nimport LabelSettingsTab from './tabs/LabelSettingsTab';\r\nimport TextFieldsIcon from '@material-ui/icons/TextFields';\r\nimport SystemOptionsTab from './tabs/SystemOptionsTab';\r\nimport PublishingAndSynchronisationTab from './tabs/PublishingAndSynchronisationTab';\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n flex: 1,\r\n display: 'flex',\r\n flexFlow: 'column',\r\n },\r\n wrapper: {\r\n flex: 1,\r\n display: 'flex',\r\n backgroundColor: '#fff',\r\n margin: '0 -15px',\r\n padding: '15px',\r\n },\r\n sidebar: {\r\n padding: '0 15px',\r\n maxWidth: '400px',\r\n width: '100%',\r\n position: 'relative',\r\n flex: 1,\r\n display: 'flex',\r\n },\r\n sidebarInner: {\r\n position: 'relative',\r\n flex: 1,\r\n // left: 0,\r\n // right: 0,\r\n // top: 0,\r\n // bottom: 0,\r\n // overflow: 'auto',\r\n },\r\n sidebarList: {\r\n position: 'absolute',\r\n top: 0,\r\n right: 0,\r\n left: 0,\r\n bottom: 0,\r\n overflow: 'auto',\r\n paddingRight: '10px',\r\n '& .Mui-selected': {\r\n backgroundColor: 'rgba(0, 0, 0, 0.2)'\r\n },\r\n '& .Mui-selected:hover': {\r\n backgroundColor: 'rgba(0, 0, 0, 0.2)'\r\n }\r\n },\r\n content: {\r\n padding: '0 15px',\r\n flexGrow: 1,\r\n display: 'flex',\r\n flexFlow: 'column',\r\n '& > div': {\r\n flexGrow: 1,\r\n maxWidth: '700px',\r\n }\r\n },\r\n tabLoaderWrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n flex: 1,\r\n }\r\n});\r\n\r\nexport enum ApplicationSettingsList {\r\n DataPublishing = 'DataPublishing',\r\n DocumentPublishing = 'DocumentPublishing',\r\n Licencing = 'Licencing',\r\n // RVMobile = 'RVMobile',\r\n StaffBudgets = 'StaffBudgets',\r\n FutureTimeSynchronization = 'FutureTimeSynchronization',\r\n TaskPublishing = 'TaskPublishing',\r\n ClientNotes = 'ClientNotes',\r\n LabelSettings = 'LabelSettings',\r\n SettingOptions = 'SystemOptions',\r\n PublishingAndSynchronisation = 'PublishingAndSynchronisation'\r\n}\r\n\r\ninterface ApplicationSettingsPageState {\r\n selectedTable: ApplicationSettingsList;\r\n tabs: SettingName[];\r\n isTabLoading: boolean;\r\n mobileSettings: MobileSettings | null;\r\n dataPublisherSettings: DataPublisherSettings | null;\r\n documentPublisherSettings: DocumentPublisherSettings | null;\r\n taskPublisherSettings: TaskPublisherSettings | null;\r\n licencing: Licencing | null;\r\n staffBudgetSettings: StaffBudgetSettings | null;\r\n futureTimeSynchronization: FutureTimeSynchronization | null;\r\n clientNotesSettings: ClientNotesSettings | null;\r\n labelSettings: LabelSettings | null;\r\n systemOptions: SystemOptions | null;\r\n}\r\n\r\ninterface ApplicationSettingsPageProps extends RouterProps {\r\n\r\n}\r\n\r\nexport default function ApplicationSettingsPage(props: ApplicationSettingsPageProps) {\r\n\r\n const classes = useStyles();\r\n\r\n const [pageState, setPageState] = useState({\r\n selectedTable: ApplicationSettingsList.ClientNotes,\r\n tabs: [],\r\n isTabLoading: true,\r\n mobileSettings: null,\r\n dataPublisherSettings: null,\r\n documentPublisherSettings: null,\r\n taskPublisherSettings: null,\r\n licencing: null,\r\n staffBudgetSettings: null,\r\n futureTimeSynchronization: null,\r\n clientNotesSettings: null,\r\n labelSettings: null,\r\n systemOptions: null\r\n });\r\n\r\n // tslint:disable-next-line: no-any\r\n let routeCommand = props.match.params.command;\r\n\r\n useEffect(() => {\r\n\r\n fetchTabData();\r\n\r\n var routeTab: ApplicationSettingsList = props.match.params.tab as ApplicationSettingsList ?? ApplicationSettingsList.ClientNotes;\r\n\r\n // tslint:disable-next-line: no-console\r\n console.log('routeCommand', routeCommand);\r\n\r\n setPageState({\r\n ...pageState,\r\n selectedTable: routeTab ? routeTab : pageState.selectedTable\r\n });\r\n\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n useEffect(() => { \r\n const subscribeSettingNotificationObj = subscribeSettingNotification();\r\n // Cleanup\r\n return () => {\r\n subscribeSettingNotificationObj.unsubscribe();\r\n };\r\n\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n const subscribeSettingNotification = () => {\r\n return (\r\n client\r\n .subscribe({\r\n fetchPolicy: 'no-cache',\r\n query: SettingNotificationSubscription,\r\n variables: {},\r\n })\r\n .subscribe({\r\n // tslint:disable-next-line:no-any\r\n next(results: any) {\r\n if (results.data.settingNotification.status) {\r\n showNotification('Success', results.data.settingNotification.message, 'info');\r\n\r\n } else {\r\n showNotification('Failed', results.data.settingNotification.message, 'error');\r\n }\r\n },\r\n // tslint:disable-next-line:no-any\r\n error(err: any) {\r\n // tslint:disable-next-line:no-console\r\n console.error(err);\r\n showNotification(null, err, 'error');\r\n },\r\n })\r\n );\r\n };\r\n\r\n const fetchTabData = () => {\r\n retrieveApplicationSettingsData(\r\n true,\r\n // tslint:disable-next-line: no-console\r\n (data: ApplicationSettingsData) => onApplicationSettingsRetrieved(data),\r\n // tslint:disable-next-line: no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n };\r\n\r\n const onApplicationSettingsRetrieved = (data: ApplicationSettingsData) => {\r\n setPageState((prevState) => {\r\n return {\r\n ...prevState,\r\n tabs: data.settings.applications.settingNames.settingName,\r\n mobileSettings: data.settings.applications.mobileSettings,\r\n dataPublisherSettings: data.settings.applications.dataPublisherSettings,\r\n documentPublisherSettings: data.settings.applications.documentPublisherSettings,\r\n taskPublisherSettings: data.settings.applications.taskPublisherSettings,\r\n licencing: data.settings.applications.licencing,\r\n staffBudgetSettings: data.settings.applications.staffBudgetSettings,\r\n futureTimeSynchronization: data.settings.applications.futureTimeSynchronization,\r\n clientNotesSettings: data.settings.applications.clientNotesSettings,\r\n labelSettings: data.settings.applications.labelSettings,\r\n systemOptions: data.settings.applications.systemOptions,\r\n isTabLoading: false\r\n };\r\n });\r\n };\r\n\r\n const getIcon = (internalName: string) => {\r\n\r\n // tslint:disable-next-line: max-line-length\r\n if (internalName === ApplicationSettingsList[ApplicationSettingsList.DocumentPublishing] || internalName === ApplicationSettingsList[ApplicationSettingsList.TaskPublishing]) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (internalName === ApplicationSettingsList[ApplicationSettingsList.Licencing]) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n // if (internalName === ApplicationSettingsList[ApplicationSettingsList.RVMobile]) {\r\n // return (\r\n // \r\n // \r\n // \r\n // );\r\n // }\r\n\r\n if (internalName === ApplicationSettingsList[ApplicationSettingsList.StaffBudgets]) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (internalName === ApplicationSettingsList[ApplicationSettingsList.FutureTimeSynchronization]) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (internalName === ApplicationSettingsList[ApplicationSettingsList.LabelSettings]) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n \r\n return (\r\n \r\n \r\n \r\n );\r\n };\r\n\r\n const isHasAccess = (internalName: string): boolean => {\r\n \r\n // if (internalName === ApplicationSettingsList[ApplicationSettingsList.EmailConfiguration]) {\r\n // return UserFeature.HasAccess(UserFeatureEnum.hasInnographyLink);\r\n // }\r\n\r\n // if (internalName === ApplicationSettingsList[ApplicationSettingsList.EnquiryDefaultConfiguration]) {\r\n // return UserFeature.HasAccess(UserFeatureEnum.hasVisionSix);\r\n // }\r\n\r\n return true;\r\n };\r\n\r\n const onClickBack = () => {\r\n props.history.push('/configurationDashboard');\r\n };\r\n\r\n const onClickTab = (value: ApplicationSettingsList) => () => {\r\n\r\n setPageState({\r\n ...pageState,\r\n selectedTable: value\r\n });\r\n\r\n props.history.push(`/applicationSettings/${value}`);\r\n };\r\n \r\n return (\r\n
\r\n \r\n
\r\n {pageState.isTabLoading ? (\r\n
\r\n \r\n
\r\n ) : (\r\n <>\r\n
\r\n
\r\n \r\n {pageState.tabs.map((tab: SettingName) => isHasAccess(tab.internalName) && (\r\n \r\n \r\n {getIcon(tab.internalName)}\r\n \r\n \r\n \r\n )\r\n )}\r\n \r\n
\r\n
\r\n
\r\n {(pageState.selectedTable === ApplicationSettingsList.ClientNotes) && (\r\n {\r\n setPageState((prevState) => {\r\n return {\r\n ...prevState,\r\n clientNotesSettings: data\r\n };\r\n });\r\n }}\r\n />\r\n )}\r\n {(pageState.selectedTable === ApplicationSettingsList.DataPublishing) && (\r\n {\r\n setPageState((prevState) => {\r\n return {\r\n ...prevState,\r\n dataPublisherSettings: data\r\n };\r\n });\r\n }}\r\n />\r\n )}\r\n {(pageState.selectedTable === ApplicationSettingsList.DocumentPublishing) && (\r\n {\r\n setPageState((prevState) => {\r\n return {\r\n ...prevState,\r\n documentPublisherSettings: data\r\n };\r\n });\r\n }}\r\n />\r\n )}\r\n {(pageState.selectedTable === ApplicationSettingsList.TaskPublishing) && (\r\n {\r\n setPageState((prevState) => {\r\n return {\r\n ...prevState,\r\n taskPublisherSettings: data\r\n };\r\n });\r\n }}\r\n />\r\n )}\r\n {/* {(pageState.selectedTable === ApplicationSettingsList.RVMobile) && (\r\n {\r\n setPageState((prevState) => {\r\n return {\r\n ...prevState,\r\n mobileSettings: data\r\n };\r\n });\r\n }}\r\n />\r\n )} */}\r\n {(pageState.selectedTable === ApplicationSettingsList.Licencing) && (\r\n {\r\n setPageState((prevState) => {\r\n return {\r\n ...prevState,\r\n licencing: data\r\n };\r\n });\r\n }}\r\n />\r\n )}\r\n {(pageState.selectedTable === ApplicationSettingsList.StaffBudgets) && (\r\n {\r\n setPageState((prevState) => {\r\n return {\r\n ...prevState,\r\n staffBudgetSettings: data\r\n };\r\n });\r\n }}\r\n />\r\n )}\r\n {(pageState.selectedTable === ApplicationSettingsList.FutureTimeSynchronization) && (\r\n {\r\n setPageState((prevState) => {\r\n return {\r\n ...prevState,\r\n futureTimeSynchronization: data\r\n };\r\n });\r\n }}\r\n />\r\n )}\r\n {(pageState.selectedTable === ApplicationSettingsList.LabelSettings) && (\r\n {\r\n setPageState((prevState) => {\r\n return {\r\n ...prevState,\r\n labelSettings: data\r\n };\r\n });\r\n }}\r\n />\r\n )}\r\n {(pageState.selectedTable === ApplicationSettingsList.SettingOptions) && (\r\n {\r\n setPageState((prevState) => {\r\n return {\r\n ...prevState,\r\n systemOptions: data\r\n };\r\n });\r\n }}\r\n />\r\n )}\r\n {(pageState.selectedTable === ApplicationSettingsList.PublishingAndSynchronisation) && (\r\n {\r\n setPageState((prevState) => {\r\n return {\r\n ...prevState,\r\n clientNotesSettings: clinetNotesData,\r\n documentPublisherSettings: documentPublisherData,\r\n futureTimeSynchronization: futureTimeSynchronizationData,\r\n staffBudgetSettings: staffBudgetSettingsData,\r\n taskPublisherSettings: taskPublisherSettingsData\r\n };\r\n });\r\n }}\r\n />\r\n )}\r\n
\r\n \r\n )}\r\n
\r\n
\r\n );\r\n}","// 0 - External message to a client (External)\r\n// 1 - Internal message only from an internal user (Internal)\r\n// 2 - It is an external message from a client (External)\r\nexport const SourceMessage = {\r\n ExternalMessageToClient: 0,\r\n InternalMessageOnlyFromInternalUser: 1,\r\n ExternalMessageFromClient: 2,\r\n} as const;\r\n\r\nexport const DocumentListFile = {\r\n ServiceLevel: 'https://redraincorp.sharepoint.com/:b:/s/RedViewProduct/EfxVw0U8GLJLvVMCK5JfaR8BLHvxV-BOesbjDCcI1Anz5g?e=XiICXx'\r\n} as const;"],"sourceRoot":""}