@kwiz/fluentui 1.0.51 → 1.0.52

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.
@@ -1,8 +1,12 @@
1
1
  import { DatePickerProps } from '@fluentui/react-datepicker-compat';
2
+ import { TimePickerProps } from '@fluentui/react-timepicker-compat';
2
3
  import * as React from 'react';
3
- interface IProps extends DatePickerProps {
4
- onOK?: () => void;
5
- onCancel?: () => void;
4
+ interface IProps {
5
+ onDateChange: (newDateObject: Date) => void;
6
+ value: Date;
7
+ showTime?: boolean;
8
+ datePickerProps?: DatePickerProps;
9
+ timePickerProps?: TimePickerProps;
6
10
  }
7
11
  export declare const DatePickerEx: React.FunctionComponent<React.PropsWithChildren<IProps>>;
8
12
  export {};
@@ -1,32 +1,43 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { DatePicker } from '@fluentui/react-datepicker-compat';
3
+ import { TimePicker } from '@fluentui/react-timepicker-compat';
3
4
  import { CalendarCancelRegular } from '@fluentui/react-icons';
4
- import { isDate, isFunction, isNullOrEmptyString } from '@kwiz/common';
5
+ import { isDate } from '@kwiz/common';
5
6
  import * as React from 'react';
6
7
  import { useKWIZFluentContext } from '../helpers/context';
8
+ import { Horizontal } from './horizontal';
7
9
  export const DatePickerEx = (props) => {
8
10
  const ctx = useKWIZFluentContext();
9
- const [showClear, setShowClear] = React.useState(isDate(props.value));
10
- const reset = React.useCallback(() => {
11
- setShowClear(false);
12
- if (isFunction(props.onSelectDate))
13
- props.onSelectDate(undefined);
14
- }, [showClear]);
15
- return (_jsx(DatePicker, Object.assign({ appearance: ctx.inputAppearance, mountNode: ctx.mountNode }, props, { onSelectDate: (date) => {
16
- setShowClear(isDate(date));
17
- if (isFunction(props.onSelectDate))
18
- props.onSelectDate(date);
19
- }, onChange: (e, data) => {
20
- setShowClear(!isNullOrEmptyString(data.value));
21
- if (isFunction(props.onChange))
22
- props.onChange(e, data);
23
- }, onKeyDown: isFunction(props.onOK) || isFunction(props.onCancel)
24
- ? e => {
25
- if (isFunction(props.onOK) && e.key === "Enter")
26
- props.onOK();
27
- else if (isFunction(props.onCancel) && e.key === "Escape")
28
- props.onCancel();
29
- }
30
- : undefined, contentBefore: showClear && _jsx(CalendarCancelRegular, { title: 'Clear', onClick: () => reset() }) })));
11
+ const { showClear, dateValue, timeValue } = React.useMemo(() => {
12
+ const showClear = isDate(props.value);
13
+ const dateValue = props.value;
14
+ const timeValue = props.value;
15
+ return { showClear, dateValue, timeValue };
16
+ }, [props.value]);
17
+ function reset() {
18
+ props.onDateChange(null);
19
+ }
20
+ const changeDateHandler = React.useCallback((newDateValue) => {
21
+ const newDate = new Date(newDateValue);
22
+ // Use the old time values.
23
+ newDate.setHours(timeValue.getHours(), timeValue.getMinutes(), 0, 0);
24
+ props.onDateChange(newDate);
25
+ }, [timeValue]);
26
+ const changeTimeHandler = React.useCallback((newTimeValue) => {
27
+ // Use the old date value.
28
+ const newDate = new Date(dateValue);
29
+ newDate.setHours(newTimeValue.getHours(), newTimeValue.getMinutes(), 0, 0);
30
+ props.onDateChange(newDate);
31
+ }, [dateValue]);
32
+ const DatePickerControl = _jsx(DatePicker, Object.assign({}, (props.datePickerProps || {}), { appearance: ctx.inputAppearance, mountNode: ctx.mountNode, value: dateValue, onSelectDate: (newDate) => {
33
+ changeDateHandler(newDate);
34
+ }, contentBefore: showClear && _jsx(CalendarCancelRegular, { title: 'Clear', onClick: () => reset() }) }));
35
+ const TimePickerControl = _jsx(TimePicker, Object.assign({ appearance: ctx.inputAppearance, mountNode: ctx.mountNode }, props.timePickerProps, { value: timeValue.toLocaleTimeString("en", { hour: "2-digit", minute: "2-digit", hour12: true }), onTimeChange: (e, date) => {
36
+ const newDate = date.selectedTime;
37
+ changeTimeHandler(newDate);
38
+ } }));
39
+ return (props.showTime
40
+ ? _jsxs(Horizontal, { children: [DatePickerControl, TimePickerControl] })
41
+ : DatePickerControl);
31
42
  };
32
43
  //# sourceMappingURL=date.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/controls/date.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAmB,MAAM,mCAAmC,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAO1D,MAAM,CAAC,MAAM,YAAY,GAA6D,CAAC,KAAK,EAAE,EAAE;IAC5F,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAC;IACnC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACjC,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,IAAI,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC;YAAE,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACtE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,OAAO,CACH,KAAC,UAAU,kBAAC,UAAU,EAAE,GAAG,CAAC,eAAe,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,IAAM,KAAK,IAC5E,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE;YACnB,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3B,IAAI,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC;gBAAE,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACjE,CAAC,EACD,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE;YAClB,YAAY,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/C,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC5D,CAAC,EACD,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;YAC3D,CAAC,CAAC,CAAC,CAAC,EAAE;gBACF,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO;oBAAE,KAAK,CAAC,IAAI,EAAE,CAAC;qBACzD,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ;oBAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;YAChF,CAAC;YACD,CAAC,CAAC,SAAS,EAEf,aAAa,EAAE,SAAS,IAAI,KAAC,qBAAqB,IAAC,KAAK,EAAC,OAAO,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,GAAI,IAC7F,CACL,CAAC;AACN,CAAC,CAAA"}
1
+ {"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/controls/date.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kwiz/fluentui",
3
- "version": "1.0.51",
3
+ "version": "1.0.52",
4
4
  "description": "KWIZ common controls for FluentUI",
5
5
  "module": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -57,6 +57,7 @@
57
57
  "typescript": "^5.3.3"
58
58
  },
59
59
  "dependencies": {
60
+ "@fluentui/react-timepicker-compat": "^0.2.42",
60
61
  "@kwiz/common": "^1.0.103",
61
62
  "esbuild": "^0.19.12",
62
63
  "get-tsconfig": "^4.7.2",
@@ -1,40 +1,81 @@
1
1
  import { DatePicker, DatePickerProps } from '@fluentui/react-datepicker-compat';
2
+ import { TimePicker, TimePickerProps } from '@fluentui/react-timepicker-compat';
3
+
2
4
  import { CalendarCancelRegular } from '@fluentui/react-icons';
3
- import { isDate, isFunction, isNullOrEmptyString } from '@kwiz/common';
5
+ import { isDate } from '@kwiz/common';
4
6
  import * as React from 'react';
5
7
  import { useKWIZFluentContext } from '../helpers/context';
8
+ import { Horizontal } from './horizontal';
6
9
 
7
-
8
- interface IProps extends DatePickerProps {
9
- onOK?: () => void;
10
- onCancel?: () => void;
10
+ interface IProps {
11
+ onDateChange: (newDateObject: Date) => void;
12
+ value: Date;
13
+ showTime?: boolean;
14
+ datePickerProps?: DatePickerProps;
15
+ timePickerProps?: TimePickerProps;
11
16
  }
12
17
  export const DatePickerEx: React.FunctionComponent<React.PropsWithChildren<IProps>> = (props) => {
13
18
  const ctx = useKWIZFluentContext();
14
- const [showClear, setShowClear] = React.useState(isDate(props.value));
15
- const reset = React.useCallback(() => {
16
- setShowClear(false);
17
- if (isFunction(props.onSelectDate)) props.onSelectDate(undefined);
18
- }, [showClear]);
19
+
20
+ const { showClear, dateValue, timeValue } = React.useMemo(() => {
21
+ const showClear = isDate(props.value);
22
+ const dateValue = props.value;
23
+ const timeValue = props.value;
24
+ return { showClear, dateValue, timeValue };
25
+ }, [props.value]);
26
+
27
+ function reset() {
28
+ props.onDateChange(null);
29
+ }
30
+
31
+ const changeDateHandler = React.useCallback((newDateValue: Date): void => {
32
+ const newDate = new Date(newDateValue);
33
+ // Use the old time values.
34
+ newDate.setHours(
35
+ timeValue.getHours(),
36
+ timeValue.getMinutes(), 0, 0
37
+ );
38
+ props.onDateChange(newDate);
39
+ }, [timeValue]);
40
+
41
+ const changeTimeHandler = React.useCallback((newTimeValue: Date): void => {
42
+ // Use the old date value.
43
+ const newDate = new Date(dateValue);
44
+ newDate.setHours(
45
+ newTimeValue.getHours(),
46
+ newTimeValue.getMinutes(), 0, 0
47
+ );
48
+ props.onDateChange(newDate);
49
+ }, [dateValue]);
50
+
51
+ const DatePickerControl = <DatePicker
52
+ {...(props.datePickerProps || {})}
53
+ appearance={ctx.inputAppearance}
54
+ mountNode={ctx.mountNode}
55
+ value={dateValue}
56
+ onSelectDate={(newDate) => {
57
+ changeDateHandler(newDate);
58
+ }}
59
+ contentBefore={showClear && <CalendarCancelRegular title='Clear' onClick={() => reset()} />}
60
+ />
61
+
62
+ const TimePickerControl = <TimePicker
63
+ appearance={ctx.inputAppearance}
64
+ mountNode={ctx.mountNode}
65
+ {...props.timePickerProps}
66
+ value={timeValue.toLocaleTimeString("en", { hour: "2-digit", minute: "2-digit", hour12: true })}
67
+ onTimeChange={(e, date) => {
68
+ const newDate = date.selectedTime;
69
+ changeTimeHandler(newDate);
70
+ }}
71
+ />
19
72
 
20
73
  return (
21
- <DatePicker appearance={ctx.inputAppearance} mountNode={ctx.mountNode} {...props}
22
- onSelectDate={(date) => {
23
- setShowClear(isDate(date));
24
- if (isFunction(props.onSelectDate)) props.onSelectDate(date);
25
- }}
26
- onChange={(e, data) => {
27
- setShowClear(!isNullOrEmptyString(data.value));
28
- if (isFunction(props.onChange)) props.onChange(e, data);
29
- }}
30
- onKeyDown={isFunction(props.onOK) || isFunction(props.onCancel)
31
- ? e => {
32
- if (isFunction(props.onOK) && e.key === "Enter") props.onOK();
33
- else if (isFunction(props.onCancel) && e.key === "Escape") props.onCancel();
34
- }
35
- : undefined
36
- }
37
- contentBefore={showClear && <CalendarCancelRegular title='Clear' onClick={() => reset()} />}
38
- />
74
+ props.showTime
75
+ ? <Horizontal>
76
+ {DatePickerControl}
77
+ {TimePickerControl}
78
+ </Horizontal>
79
+ : DatePickerControl
39
80
  );
40
81
  }