@talxis/base-controls 1.2606.2 → 1.2606.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,32 +6,20 @@ import { ThemeProvider } from '@fluentui/react';
6
6
  import numeral from 'numeral';
7
7
  import { getDefaultDurationTranslations } from './translations.js';
8
8
  import { durationOptions } from './durationOptions.js';
9
- import humanizeDuration from 'humanize-duration';
10
- import { Numeral } from '@talxis/client-libraries';
9
+ import { Formatting, Numeral } from '@talxis/client-libraries';
11
10
 
12
11
  const Duration = (props) => {
13
12
  const parameters = props.parameters;
14
13
  const boundValue = parameters.value;
15
14
  const componentRef = useRef(null);
16
15
  const context = props.context;
17
- const formattingInfo = context.userSettings;
18
- //@ts-ignore - locale is part of UserSettings
19
- const language = formattingInfo.locale;
16
+ context.userSettings;
20
17
  const numberFormatting = context.userSettings.numberFormattingInfo;
21
18
  const onOverrideComponentProps = props.onOverrideComponentProps ?? ((props) => props);
19
+ const hoursPerDay = typeof parameters.HoursPerDay?.raw === 'number' && parameters.HoursPerDay.raw > 0 ? parameters.HoursPerDay.raw : 24;
22
20
  const formatter = (value) => {
23
- //all duration formatting should happen here
24
21
  if (typeof value === 'number') {
25
- const durationInMilliseconds = value * 60000;
26
- const units = value < 60 ? ['m'] : value >= 1440 ? ['d'] : ['h'];
27
- const options = {
28
- units: units,
29
- maxDecimalPoints: 2,
30
- language: language.slice(0, language.indexOf("-")),
31
- decimal: context.userSettings.numberFormattingInfo.numberDecimalSeparator,
32
- fallbacks: ["en"]
33
- };
34
- return humanizeDuration(durationInMilliseconds, options);
22
+ return Formatting.Get().formatDuration(value, hoursPerDay);
35
23
  }
36
24
  return value;
37
25
  };
@@ -81,7 +69,7 @@ const Duration = (props) => {
81
69
  case 'hour':
82
70
  return 60 * value;
83
71
  case 'day':
84
- return 60 * value * 24;
72
+ return minutesPerDay * value;
85
73
  case 'minute':
86
74
  default:
87
75
  return value;
@@ -1 +1 @@
1
- {"version":3,"file":"Duration.js","sources":["../../../src/components/Duration/Duration.tsx"],"sourcesContent":["import { ComboBox } from \"@talxis/react-components\";\nimport { useEffect, useMemo, useRef } from 'react';\nimport { useInputBasedControl } from '../../hooks/useInputBasedControl';\nimport { IDuration, IDurationOutputs, IDurationParameters } from './interfaces';\nimport { IComboBox, IComboBoxOption, ThemeProvider } from '@fluentui/react';\nimport numeral from \"numeral\";\nimport { getDefaultDurationTranslations } from './translations';\nimport { durationOptions } from \"./durationOptions\";\nimport humanizeDuration, { Unit } from \"humanize-duration\";\nimport { Numeral } from \"@talxis/client-libraries\";\n\nexport const Duration = (props: IDuration) => {\n const parameters = props.parameters;\n const boundValue = parameters.value;\n const componentRef = useRef<IComboBox>(null);\n const context = props.context;\n const formattingInfo = context.userSettings;\n //@ts-ignore - locale is part of UserSettings\n const language = formattingInfo.locale;\n const numberFormatting = context.userSettings.numberFormattingInfo;\n const onOverrideComponentProps = props.onOverrideComponentProps ?? ((props) => props);\n\n const formatter = (value: number | null) => {\n //all duration formatting should happen here\n if (typeof value === 'number') {\n const durationInMilliseconds = value * 60000;\n const units: Unit[] = value < 60 ? ['m'] : value >= 1440 ? ['d'] : ['h'];\n const options = {\n units: units,\n maxDecimalPoints: 2,\n language: language.slice(0, language.indexOf(\"-\")),\n decimal: context.userSettings.numberFormattingInfo.numberDecimalSeparator,\n fallbacks: [\"en\"]\n };\n return humanizeDuration(durationInMilliseconds, options);\n }\n return value;\n };\n\n const valueExtractor = (str: string | null): number | undefined | string => {\n //extraction of number of minutes from formatted string should happen here\n // parsing because labels are string that represent array of strings\n if(initialFormattedValue === str) {\n return boundValue.raw as number;\n }\n const minuteLabels = JSON.parse(labels.minute());\n const minutesLabels = JSON.parse(labels.minutes());\n const hourLabels = JSON.parse(labels.hour());\n const hoursLabels = JSON.parse(labels.hours());\n const dayLabels = JSON.parse(labels.day());\n const daysLabels = JSON.parse(labels.days());\n const minuteRegex = new RegExp(\"^(\" + minuteLabels.join('|') + \")\\\\s|\\\\s(\" + minuteLabels.join('|') + \")$|^(\" + minutesLabels.join('|') + \")\\\\s|\\\\s(\" + minutesLabels.join('|') + \")$\", \"i\");\n const hourRegex = new RegExp(\"^(\" + hourLabels.join('|') + \")\\\\s|\\\\s(\" + hourLabels.join('|') + \")$|^(\" + hoursLabels.join('|') + \")\\\\s|\\\\s(\" + hoursLabels.join('|') + \")$\", \"i\");\n const dayRegex = new RegExp(\"^(\" + dayLabels.join('|') + \")\\\\s|\\\\s(\" + dayLabels.join('|') + \")$|^(\" + daysLabels.join('|') + \")\\\\s|\\\\s(\" + daysLabels.join('|') + \")$\", \"i\");\n\n if (str && str.trim()) {\n let input = str.trim().toLowerCase();\n let unit = 'minute';\n\n if (minuteRegex.test(input)) {\n input = input.replace(minuteRegex, \"\").trim();\n } else if (hourRegex.test(input)) {\n input = input.replace(hourRegex, \"\").trim();\n unit = 'hour';\n } else if (dayRegex.test(input)) {\n input = input.replace(dayRegex, \"\").trim();\n unit = 'day';\n }\n const parsedNumber = parseNumber(input);\n if (parsedNumber && !isNaN(parsedNumber)) {\n return getDurationInMinutes(parsedNumber, unit);\n }\n return str;\n }\n return undefined;\n };\n\n const parseNumber = (input: string): number | undefined => {\n Numeral.decimal(numberFormatting);\n return numeral(input).value() ?? undefined;\n };\n\n const getDurationInMinutes = (value: number, unit: string): number => {\n switch (unit) {\n case 'hour':\n return 60 * value;\n case 'day':\n return 60 * value * 24;\n case 'minute':\n default:\n return value;\n }\n };\n\n const presetOptions = (): IComboBoxOption[] => {\n const formattedOptions = durationOptions.map(option => ({\n key: option.Value.toString(),\n text: formatter(parseInt(option.Label)) ?? \"\",\n }));\n return formattedOptions;\n };\n\n const comboBoxOptions: IComboBoxOption[] = presetOptions();\n\n const { value, labels, sizing, setValue, onNotifyOutputChanged, theme } = useInputBasedControl<string | null, IDurationParameters, IDurationOutputs, Required<IDuration>['translations']>('Duration', props, {\n formatter: formatter,\n valueExtractor: valueExtractor,\n defaultTranslations: getDefaultDurationTranslations(),\n });\n\n const initialFormattedValue = useMemo(() => value, [])\n\n useEffect(() => {\n if (parameters.AutoFocus?.raw) {\n componentRef.current?.focus(true);\n }\n }, []);\n\n const componentProps = onOverrideComponentProps({\n componentRef,\n options: comboBoxOptions,\n hideErrorMessage: !parameters.ShowErrorMessage?.raw,\n\n allowFreeInput: true,\n autoComplete: 'on',\n autofill: parameters.AutoFocus?.raw === true ? { autoFocus: true } : undefined,\n readOnly: context.mode.isControlDisabled,\n useComboBoxAsMenuWidth: true,\n errorMessage: boundValue.errorMessage,\n text: value ?? '',\n styles: {\n root: {\n height: sizing.height,\n width: sizing.width,\n display: 'flex',\n alignItems: 'center',\n },\n callout: {\n height: 300\n }\n },\n calloutProps: {\n theme: props.context.fluentDesignLanguage?.applicationTheme ?? theme\n },\n onRenderContainer: (containerProps, defaultRender) => <ThemeProvider theme={props.context.fluentDesignLanguage?.applicationTheme}>{defaultRender?.(containerProps)}</ThemeProvider>,\n onInputValueChange: (text) => {\n setValue(text ?? '');\n },\n onBlur: (event) => {\n onNotifyOutputChanged({\n //any is needed here because we can return string in case of error values\n value: valueExtractor(value) as any\n });\n },\n onChange: (e, value) => {\n onNotifyOutputChanged({\n //any is needed here because we can return string in case of error values\n value: valueExtractor(value?.text ?? '') as any\n });\n }\n });\n\n return (\n <ThemeProvider theme={theme} applyTo=\"none\">\n <ComboBox {...componentProps} />\n </ThemeProvider>\n );\n};"],"names":["_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"Duration.js","sources":["../../../src/components/Duration/Duration.tsx"],"sourcesContent":["import { ComboBox } from \"@talxis/react-components\";\nimport { useEffect, useMemo, useRef } from 'react';\nimport { useInputBasedControl } from '../../hooks/useInputBasedControl';\nimport { IDuration, IDurationOutputs, IDurationParameters } from './interfaces';\nimport { IComboBox, IComboBoxOption, ThemeProvider } from '@fluentui/react';\nimport numeral from \"numeral\";\nimport { getDefaultDurationTranslations } from './translations';\nimport { durationOptions } from \"./durationOptions\";\nimport humanizeDuration, { HumanizerOptions, Unit } from \"humanize-duration\";\nimport { Formatting, Numeral } from \"@talxis/client-libraries\";\n\nexport const Duration = (props: IDuration) => {\n const parameters = props.parameters;\n const boundValue = parameters.value;\n const componentRef = useRef<IComboBox>(null);\n const context = props.context;\n const formattingInfo = context.userSettings;\n const numberFormatting = context.userSettings.numberFormattingInfo;\n const onOverrideComponentProps = props.onOverrideComponentProps ?? ((props) => props);\n const hoursPerDay = typeof parameters.HoursPerDay?.raw === 'number' && parameters.HoursPerDay.raw > 0 ? parameters.HoursPerDay.raw : 24;\n\n const formatter = (value: number | null) => {\n if (typeof value === 'number') {\n return Formatting.Get().formatDuration(value, hoursPerDay);\n }\n return value;\n };\n\n const valueExtractor = (str: string | null): number | undefined | string => {\n //extraction of number of minutes from formatted string should happen here\n // parsing because labels are string that represent array of strings\n if(initialFormattedValue === str) {\n return boundValue.raw as number;\n }\n const minuteLabels = JSON.parse(labels.minute());\n const minutesLabels = JSON.parse(labels.minutes());\n const hourLabels = JSON.parse(labels.hour());\n const hoursLabels = JSON.parse(labels.hours());\n const dayLabels = JSON.parse(labels.day());\n const daysLabels = JSON.parse(labels.days());\n const minuteRegex = new RegExp(\"^(\" + minuteLabels.join('|') + \")\\\\s|\\\\s(\" + minuteLabels.join('|') + \")$|^(\" + minutesLabels.join('|') + \")\\\\s|\\\\s(\" + minutesLabels.join('|') + \")$\", \"i\");\n const hourRegex = new RegExp(\"^(\" + hourLabels.join('|') + \")\\\\s|\\\\s(\" + hourLabels.join('|') + \")$|^(\" + hoursLabels.join('|') + \")\\\\s|\\\\s(\" + hoursLabels.join('|') + \")$\", \"i\");\n const dayRegex = new RegExp(\"^(\" + dayLabels.join('|') + \")\\\\s|\\\\s(\" + dayLabels.join('|') + \")$|^(\" + daysLabels.join('|') + \")\\\\s|\\\\s(\" + daysLabels.join('|') + \")$\", \"i\");\n\n if (str && str.trim()) {\n let input = str.trim().toLowerCase();\n let unit = 'minute';\n\n if (minuteRegex.test(input)) {\n input = input.replace(minuteRegex, \"\").trim();\n } else if (hourRegex.test(input)) {\n input = input.replace(hourRegex, \"\").trim();\n unit = 'hour';\n } else if (dayRegex.test(input)) {\n input = input.replace(dayRegex, \"\").trim();\n unit = 'day';\n }\n const parsedNumber = parseNumber(input);\n if (parsedNumber && !isNaN(parsedNumber)) {\n return getDurationInMinutes(parsedNumber, unit);\n }\n return str;\n }\n return undefined;\n };\n\n const parseNumber = (input: string): number | undefined => {\n Numeral.decimal(numberFormatting);\n return numeral(input).value() ?? undefined;\n };\n\n const getDurationInMinutes = (value: number, unit: string): number => {\n switch (unit) {\n case 'hour':\n return 60 * value;\n case 'day':\n return minutesPerDay * value;\n case 'minute':\n default:\n return value;\n }\n };\n\n const presetOptions = (): IComboBoxOption[] => {\n const formattedOptions = durationOptions.map(option => ({\n key: option.Value.toString(),\n text: formatter(parseInt(option.Label)) ?? \"\",\n }));\n return formattedOptions;\n };\n\n const comboBoxOptions: IComboBoxOption[] = presetOptions();\n\n const { value, labels, sizing, setValue, onNotifyOutputChanged, theme } = useInputBasedControl<string | null, IDurationParameters, IDurationOutputs, Required<IDuration>['translations']>('Duration', props, {\n formatter: formatter,\n valueExtractor: valueExtractor,\n defaultTranslations: getDefaultDurationTranslations(),\n });\n\n const initialFormattedValue = useMemo(() => value, [])\n\n useEffect(() => {\n if (parameters.AutoFocus?.raw) {\n componentRef.current?.focus(true);\n }\n }, []);\n\n const componentProps = onOverrideComponentProps({\n componentRef,\n options: comboBoxOptions,\n hideErrorMessage: !parameters.ShowErrorMessage?.raw,\n\n allowFreeInput: true,\n autoComplete: 'on',\n autofill: parameters.AutoFocus?.raw === true ? { autoFocus: true } : undefined,\n readOnly: context.mode.isControlDisabled,\n useComboBoxAsMenuWidth: true,\n errorMessage: boundValue.errorMessage,\n text: value ?? '',\n styles: {\n root: {\n height: sizing.height,\n width: sizing.width,\n display: 'flex',\n alignItems: 'center',\n },\n callout: {\n height: 300\n }\n },\n calloutProps: {\n theme: props.context.fluentDesignLanguage?.applicationTheme ?? theme\n },\n onRenderContainer: (containerProps, defaultRender) => <ThemeProvider theme={props.context.fluentDesignLanguage?.applicationTheme}>{defaultRender?.(containerProps)}</ThemeProvider>,\n onInputValueChange: (text) => {\n setValue(text ?? '');\n },\n onBlur: (event) => {\n onNotifyOutputChanged({\n //any is needed here because we can return string in case of error values\n value: valueExtractor(value) as any\n });\n },\n onChange: (e, value) => {\n onNotifyOutputChanged({\n //any is needed here because we can return string in case of error values\n value: valueExtractor(value?.text ?? '') as any\n });\n }\n });\n\n return (\n <ThemeProvider theme={theme} applyTo=\"none\">\n <ComboBox {...componentProps} />\n </ThemeProvider>\n );\n};"],"names":["_jsx"],"mappings":"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"}
@@ -7,6 +7,7 @@ export interface IDuration extends IControl<IDurationParameters, IDurationOutput
7
7
  }
8
8
  export interface IDurationParameters extends IInputParameters {
9
9
  value: IWholeNumberProperty;
10
+ HoursPerDay?: Omit<IWholeNumberProperty, 'attributes'>;
10
11
  }
11
12
  export interface IDurationOutputs extends IOutputs {
12
13
  value?: number;
package/dist/index.d.ts CHANGED
@@ -1322,6 +1322,7 @@ interface IDuration extends IControl<IDurationParameters, IDurationOutputs, Part
1322
1322
  }
1323
1323
  interface IDurationParameters extends IInputParameters {
1324
1324
  value: IWholeNumberProperty;
1325
+ HoursPerDay?: Omit<IWholeNumberProperty, 'attributes'>;
1325
1326
  }
1326
1327
  interface IDurationOutputs extends IOutputs$1 {
1327
1328
  value?: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@talxis/base-controls",
3
- "version": "1.2606.2",
3
+ "version": "1.2606.4",
4
4
  "description": "Set of React components that natively work with Power Apps Component Framework APIs.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -84,7 +84,7 @@
84
84
  "@dnd-kit/sortable": "^10.0.0",
85
85
  "@dnd-kit/utilities": "^3.2.2",
86
86
  "@fluentui/react-migration-v8-v9": "^9.6.20",
87
- "@talxis/client-libraries": "1.2606.1",
87
+ "@talxis/client-libraries": "^1.2606.2",
88
88
  "@talxis/client-metadata": "^0.0.4",
89
89
  "color": "^4.2.3",
90
90
  "dayjs": "^1.11.10",