@kwiz/fluentui 1.0.153 → 1.0.155

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.
@@ -0,0 +1,12 @@
1
+ import { ComboboxProps } from "@fluentui/react-components";
2
+ interface iProps extends Omit<ComboboxProps, "selectedOptions" | "onChange" | "onOptionSelect" | "children"> {
3
+ items: {
4
+ key: string;
5
+ text: string;
6
+ }[];
7
+ value: string;
8
+ onChange: (value: string) => void;
9
+ freeFormPrefix?: string;
10
+ }
11
+ export declare function ComboboxEX(props: iProps): import("react/jsx-runtime").JSX.Element;
12
+ export {};
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Combobox, Option } from "@fluentui/react-components";
3
+ import { firstOrNull, isNotEmptyString } from "@kwiz/common";
4
+ import { useMemo } from "react";
5
+ const freeFormKey = "$freeform";
6
+ //** a controlled single select combo box that allows custom text typing */
7
+ export function ComboboxEX(props) {
8
+ const { items, value, onChange, freeFormPrefix } = props;
9
+ const selectedOption = useMemo(() => firstOrNull(items, i => i.key === value), [items, value]);
10
+ const text = (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.text) || value;
11
+ return _jsxs(Combobox, Object.assign({}, props, { value: text, selectedOptions: isNotEmptyString(value) ? [selectedOption ? selectedOption.key : freeFormKey] : [], onChange: (e) => {
12
+ console.log(e.currentTarget.value);
13
+ onChange(e.currentTarget.value);
14
+ }, onOptionSelect: (e, data) => {
15
+ if (isNotEmptyString(data.optionValue)) {
16
+ console.log(data.optionValue);
17
+ onChange(data.optionValue);
18
+ }
19
+ }, children: [!selectedOption && _jsx(Option, { children: `${freeFormPrefix}${value}` }, freeFormKey), items.map(o => _jsx(Option, { value: o.key, children: o.text }, o.key))] }));
20
+ }
21
+ //# sourceMappingURL=combobox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"combobox.js","sourceRoot":"","sources":["../../src/controls/combobox.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAiB,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAShC,MAAM,WAAW,GAAG,WAAW,CAAC;AAEhC,2EAA2E;AAC3E,MAAM,UAAU,UAAU,CAAC,KAAa;IACpC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAEzD,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAE/F,MAAM,IAAI,GAAG,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,IAAI,KAAI,KAAK,CAAC;IAE3C,OAAO,MAAC,QAAQ,oBAAK,KAAK,IACtB,KAAK,EAAE,IAAI,EACX,eAAe,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,EACnG,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;YACZ,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACnC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC,EACD,cAAc,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE;YACxB,IAAI,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBACrC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC9B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC/B,CAAC;QACL,CAAC,aACA,CAAC,cAAc,IAAI,KAAC,MAAM,cAAoB,GAAG,cAAc,GAAG,KAAK,EAAE,IAAzC,WAAW,CAAwC,EACnF,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAC,MAAM,IAAa,KAAK,EAAE,CAAC,CAAC,GAAG,YAAG,CAAC,CAAC,IAAI,IAA5B,CAAC,CAAC,GAAG,CAAiC,CAAC,KAC7D,CAAC;AAChB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { FieldProps } from "@fluentui/react-components";
2
+ interface iProps<ValueType> extends FieldProps {
3
+ /** return non empty string if value is not valid */
4
+ validation?: () => string;
5
+ formKey?: string;
6
+ required?: boolean;
7
+ /** sendIn */
8
+ value?: ValueType;
9
+ }
10
+ export declare function FormFieldEX<ValueType>(props: iProps<ValueType>): import("react/jsx-runtime").JSX.Element;
11
+ export {};
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Field } from "@fluentui/react-components";
3
+ import { isNotEmptyString, isNullOrEmptyArray, isNullOrEmptyString, isNullOrUndefined, stringEqualsOrEmpty } from "@kwiz/common";
4
+ import { useCallback, useEffect, useState } from "react";
5
+ import { useFormValidationContext } from "./form-context";
6
+ export function FormFieldEX(props) {
7
+ const { validation, formKey, required, value } = props;
8
+ const validate_internal = useCallback(() => {
9
+ //calc if value is valid
10
+ let error = validation
11
+ ? validation()
12
+ : "";
13
+ if (isNullOrEmptyString(error) && required) {
14
+ if ((Array.isArray(value) ? isNullOrEmptyArray(value) : isNullOrEmptyString(value)))
15
+ error = "Missing required value";
16
+ }
17
+ return error;
18
+ }, [validation, required, value]);
19
+ const [error, setError] = useState(validate_internal());
20
+ useEffect(() => {
21
+ const newError = validate_internal();
22
+ if (!stringEqualsOrEmpty(newError, error))
23
+ setError(newError);
24
+ }, [validate_internal, value, error]);
25
+ const formContext = useFormValidationContext();
26
+ useEffect(() => {
27
+ if (!isNullOrUndefined(formContext === null || formContext === void 0 ? void 0 : formContext.setError)) {
28
+ formContext.setError(error, formKey);
29
+ }
30
+ }, [formContext, error, formKey]);
31
+ return _jsx(Field, Object.assign({}, props, { validationMessage: formContext.showErrors ? error : undefined, validationState: formContext.showErrors && isNotEmptyString(error) ? "error" : "none", children: props.children }));
32
+ }
33
+ //# sourceMappingURL=field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field.js","sourceRoot":"","sources":["../../src/controls/field.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAc,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACjI,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAY1D,MAAM,UAAU,WAAW,CAAY,KAAwB;IAC3D,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAEvD,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;QACvC,wBAAwB;QACxB,IAAI,KAAK,GAAG,UAAU;YAClB,CAAC,CAAC,UAAU,EAAE;YACd,CAAC,CAAC,EAAE,CAAC;QACT,IAAI,mBAAmB,CAAC,KAAK,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;gBAC/E,KAAK,GAAG,wBAAwB,CAAC;QACzC,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;IAElC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAExD,SAAS,CAAC,GAAG,EAAE;QACX,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;QACrC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC;YACrC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC,EAAE,CAAC,iBAAiB,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAEtC,MAAM,WAAW,GAAG,wBAAwB,EAAE,CAAC;IAE/C,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,iBAAiB,CAAC,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,QAAQ,CAAC,EAAE,CAAC;YAC5C,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACzC,CAAC;IACL,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAElC,OAAO,KAAC,KAAK,oBAAK,KAAK,IACnB,iBAAiB,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,eAAe,EAAE,WAAW,CAAC,UAAU,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,YACnJ,KAAK,CAAC,QAAQ,IACX,CAAC;AACb,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { IDictionary } from "@kwiz/common";
2
+ import React, { ReactNode } from "react";
3
+ /** do not add to index - this is to be used in FormDialogEX
4
+ * we should create anotehr wrapper for forms that do not need a dialog (toolbar? save/cancel action?)
5
+ */
6
+ interface iFormValidationContext {
7
+ errors?: IDictionary<string>;
8
+ setError?: (error: string, key?: string) => void;
9
+ showErrors?: boolean;
10
+ }
11
+ export declare const FormValidationContext: React.Context<iFormValidationContext>;
12
+ /** fields inside a FormEX component can react to validation errors */
13
+ export declare function useFormValidationContext(): iFormValidationContext;
14
+ /** Creates a form validation context, reports back if form is valid so you can enable/disable the save button */
15
+ export declare function Internal_FormEX({ children, onValid, submitError }: {
16
+ children: ReactNode;
17
+ onValid?: (isValid: boolean) => void;
18
+ submitError?: string;
19
+ }): import("react/jsx-runtime").JSX.Element;
20
+ export {};
@@ -0,0 +1,50 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { MessageBar } from "@fluentui/react-components";
3
+ import { isNotEmptyString, isNullOrEmptyString, jsonClone, stringEqualsOrEmpty } from "@kwiz/common";
4
+ import React, { useCallback, useEffect, useState } from "react";
5
+ //create context
6
+ export const FormValidationContext = React.createContext({});
7
+ /** fields inside a FormEX component can react to validation errors */
8
+ export function useFormValidationContext() {
9
+ const ctx = React.useContext(FormValidationContext);
10
+ return ctx;
11
+ }
12
+ /** Creates a form validation context, reports back if form is valid so you can enable/disable the save button */
13
+ export function Internal_FormEX({ children, onValid, submitError }) {
14
+ const [showErrors, setShowErrors] = useState(false);
15
+ const [errors, setErrors] = useState({});
16
+ useEffect(() => {
17
+ let valid = true;
18
+ Object.values(errors).forEach(value => {
19
+ if (isNotEmptyString(value))
20
+ valid = false;
21
+ });
22
+ onValid === null || onValid === void 0 ? void 0 : onValid(valid);
23
+ }, [errors, onValid]);
24
+ const setError = useCallback((error, key) => {
25
+ //clear form errors on any other field change...
26
+ let clearFormError = isNotEmptyString(key);
27
+ key = isNullOrEmptyString(key) ? "form" : key;
28
+ //current error
29
+ const currentError = errors[key];
30
+ if (!stringEqualsOrEmpty(currentError, error)) {
31
+ clearFormError = clearFormError && isNullOrEmptyString(error);
32
+ const newErrors = jsonClone(errors);
33
+ if (clearFormError)
34
+ delete newErrors.form;
35
+ newErrors[key] = error;
36
+ //report back to a form errors collection
37
+ setErrors(newErrors);
38
+ }
39
+ }, [errors]);
40
+ useEffect(() => {
41
+ if (!showErrors && isNotEmptyString(submitError))
42
+ setShowErrors(true);
43
+ }, [submitError, showErrors]);
44
+ return _jsxs(FormValidationContext.Provider, { value: {
45
+ errors,
46
+ setError,
47
+ showErrors
48
+ }, children: [isNotEmptyString(submitError) && _jsx(MessageBar, { intent: "error", children: submitError }), isNotEmptyString(errors.form) && _jsx(MessageBar, { intent: "error", children: errors.form }), children] });
49
+ }
50
+ //# sourceMappingURL=form-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-context.js","sourceRoot":"","sources":["../../src/controls/form-context.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAe,gBAAgB,EAAE,mBAAmB,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAClH,OAAO,KAAK,EAAE,EAAa,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAa3E,gBAAgB;AAChB,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC,aAAa,CAAyB,EAAE,CAAC,CAAC;AACrF,sEAAsE;AACtE,MAAM,UAAU,wBAAwB;IACpC,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;IACpD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,iHAAiH;AACjH,MAAM,UAAU,eAAe,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAI/D;IACG,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAsB,EAAE,CAAC,CAAC;IAE9D,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAClC,IAAI,gBAAgB,CAAC,KAAK,CAAC;gBACvB,KAAK,GAAG,KAAK,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,KAAK,CAAC,CAAC;IACrB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAEtB,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,KAAa,EAAE,GAAY,EAAE,EAAE;QACzD,gDAAgD;QAChD,IAAI,cAAc,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC3C,GAAG,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;QAC9C,eAAe;QACf,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC;YAC5C,cAAc,GAAG,cAAc,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC9D,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,cAAc;gBACd,OAAO,SAAS,CAAC,IAAI,CAAC;YAC1B,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACvB,yCAAyC;YACzC,SAAS,CAAC,SAAS,CAAC,CAAC;QACzB,CAAC;IACL,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,UAAU,IAAI,gBAAgB,CAAC,WAAW,CAAC;YAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;IAE9B,OAAO,MAAC,qBAAqB,CAAC,QAAQ,IAClC,KAAK,EAAE;YACH,MAAM;YACN,QAAQ;YACR,UAAU;SACb,aACA,gBAAgB,CAAC,WAAW,CAAC,IAAI,KAAC,UAAU,IAAC,MAAM,EAAC,OAAO,YAAE,WAAW,GAAc,EACtF,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAC,UAAU,IAAC,MAAM,EAAC,OAAO,YAAE,MAAM,CAAC,IAAI,GAAc,EACtF,QAAQ,IACoB,CAAC;AACtC,CAAC"}
@@ -0,0 +1,29 @@
1
+ /** T would be some sort of FormData {
2
+ * field:type1
3
+ * }
4
+ * > Make sure K is a key in FormData
5
+ * > Make sure the value type of that field value is type1 T[K]
6
+ * read more: https://stackoverflow.com/questions/68304361/how-to-define-an-array-of-generic-objects-in-typescript-each-item-having-a-diff
7
+ } */
8
+ type FormField<FormData> = {
9
+ [FieldName in keyof FormData]: {
10
+ required?: boolean;
11
+ label?: string;
12
+ hint?: string;
13
+ key: FieldName;
14
+ validation?: (value: FormData[FieldName], values: FormData) => string;
15
+ /** should not be an uncontrolled control */
16
+ fieldControl: (value: FormData[FieldName], setValue: (value: FormData[FieldName]) => void) => JSX.Element;
17
+ };
18
+ }[keyof FormData & string];
19
+ export declare function FormDialogEX<FormData>({ defaultValues, fields, buttonIcon, buttonTitle, dialogTitle, onSubmit, onClose }: {
20
+ defaultValues: FormData;
21
+ fields: FormField<FormData>[];
22
+ buttonIcon?: JSX.Element;
23
+ buttonTitle?: string;
24
+ dialogTitle: string;
25
+ /** called if form fields are all valid */
26
+ onSubmit: (values: FormData) => Promise<string>;
27
+ onClose?: () => void;
28
+ }): import("react/jsx-runtime").JSX.Element;
29
+ export {};
@@ -0,0 +1,58 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
11
+ import { MessageBar } from "@fluentui/react-components";
12
+ import { CommonConfig, isNotEmptyString, isNullOrUndefined, jsonClone } from "@kwiz/common";
13
+ import { useCallback, useState } from "react";
14
+ import { ButtonEXPrimarySubtle } from "./button";
15
+ import { FormFieldEX } from "./field";
16
+ import { Internal_FormEX } from "./form-context";
17
+ import { PleaseWait } from "./please-wait";
18
+ import { Prompter } from "./prompt";
19
+ import { Vertical } from "./vertical";
20
+ export function FormDialogEX({ defaultValues, fields, buttonIcon, buttonTitle, dialogTitle, onSubmit, onClose }) {
21
+ const addButton = !isNullOrUndefined(buttonIcon) || isNotEmptyString(buttonTitle);
22
+ const [inProgress, setInProgress] = useState(false);
23
+ const [show, setShow] = useState(false);
24
+ const [valid, setValid] = useState(false);
25
+ const [submitError, setSubmitError] = useState("");
26
+ const [values, setValues] = useState(defaultValues);
27
+ const clearForm = useCallback(() => {
28
+ setValid(false);
29
+ setSubmitError("");
30
+ setValues(jsonClone(defaultValues));
31
+ }, [defaultValues]);
32
+ return _jsxs(_Fragment, { children: [addButton && _jsx(ButtonEXPrimarySubtle, { icon: buttonIcon, title: buttonTitle, onClick: () => { clearForm(); setShow(true); } }), (show || !addButton) && _jsx(Prompter, { title: dialogTitle, onCancel: () => {
33
+ setShow(false);
34
+ onClose === null || onClose === void 0 ? void 0 : onClose();
35
+ }, okButtonProps: { disabled: !valid }, onOK: () => __awaiter(this, void 0, void 0, function* () {
36
+ if (valid) {
37
+ setInProgress(true);
38
+ let serverError = "";
39
+ try {
40
+ serverError = yield onSubmit(values);
41
+ }
42
+ catch (e) {
43
+ console.log(e);
44
+ serverError = "Unknown server error";
45
+ }
46
+ if (isNotEmptyString(serverError)) {
47
+ setSubmitError(serverError);
48
+ }
49
+ else {
50
+ setShow(false);
51
+ }
52
+ setInProgress(false);
53
+ }
54
+ }), children: _jsxs(Vertical, { children: [inProgress && _jsx(PleaseWait, {}), _jsx(Internal_FormEX, { submitError: submitError, onValid: isValid => setValid(isValid), children: fields.map(field => _jsxs(FormFieldEX, { label: field.label, hint: field.hint, formKey: field.key, required: field.required, value: values[field.key], validation: field.validation ? () => {
55
+ return field.validation(values[field.key], values);
56
+ } : undefined, children: [isNullOrUndefined(values[field.key]) && CommonConfig.i.IsLocalDev && _jsx(MessageBar, { layout: "multiline", intent: "warning", children: "This should be a controlled element, value should never be null or your control might get out of sync." }), field.fieldControl(values[field.key], newValue => setValues(Object.assign(Object.assign({}, values), { [field.key]: newValue })))] }, field.key)) })] }) })] });
57
+ }
58
+ //# sourceMappingURL=form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form.js","sourceRoot":"","sources":["../../src/controls/form.tsx"],"names":[],"mappings":"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"}
@@ -6,15 +6,18 @@ export * from './card-list';
6
6
  export * from './centered';
7
7
  export * from './code-editor';
8
8
  export * from './ColorPickerDialog';
9
+ export * from './combobox';
9
10
  export * from './date';
10
11
  export * from './diagram-picker';
11
12
  export * from './divider';
12
13
  export * from './drawer-ex';
13
14
  export * from './dropdown';
14
15
  export * from './error-boundary';
16
+ export * from './field';
15
17
  export * from './field-editor';
16
18
  export * from './field-set';
17
19
  export * from './file-upload';
20
+ export * from './form';
18
21
  export * from './horizontal';
19
22
  export * from './html-editor';
20
23
  export * from './input';
@@ -33,6 +36,7 @@ export * from './search';
33
36
  export * from './section';
34
37
  export * from './stack';
35
38
  export * from './svg';
39
+ export * from './table';
36
40
  export * from './tabs';
37
41
  export * from './tag-ex';
38
42
  export * from './toolbar';
@@ -6,15 +6,18 @@ export * from './card-list';
6
6
  export * from './centered';
7
7
  export * from './code-editor';
8
8
  export * from './ColorPickerDialog';
9
+ export * from './combobox';
9
10
  export * from './date';
10
11
  export * from './diagram-picker';
11
12
  export * from './divider';
12
13
  export * from './drawer-ex';
13
14
  export * from './dropdown';
14
15
  export * from './error-boundary';
16
+ export * from './field';
15
17
  export * from './field-editor';
16
18
  export * from './field-set';
17
19
  export * from './file-upload';
20
+ export * from './form';
18
21
  export * from './horizontal';
19
22
  export * from './html-editor';
20
23
  export * from './input';
@@ -33,6 +36,7 @@ export * from './search';
33
36
  export * from './section';
34
37
  export * from './stack';
35
38
  export * from './svg';
39
+ export * from './table';
36
40
  export * from './tabs';
37
41
  export * from './tag-ex';
38
42
  export * from './toolbar';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/controls/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,QAAQ,CAAC;AACvB,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/controls/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { IDictionary, primitiveTypes } from "@kwiz/common";
2
+ import { ReactNode } from "react";
3
+ import { iMenuItemEX } from "./menu";
4
+ type expandedColType = {
5
+ /** key used for getting the column value, and for sorting/filtering */
6
+ key: string;
7
+ renderer?: string | (() => ReactNode);
8
+ headerCss?: string[];
9
+ css?: string[];
10
+ nowrap?: boolean;
11
+ sortable?: boolean;
12
+ /** should match the type of primitiveValue or tableItemValueType */
13
+ filter?: "string" | "bool" | "number" | "date";
14
+ primary?: boolean;
15
+ };
16
+ type colType = string | expandedColType;
17
+ export type tableItemExpandedValueType = {
18
+ /** pass in any object you can access in your actions */
19
+ raw?: object;
20
+ /** if your renderer does not return a simple string, use this to provide a sort/filter value */
21
+ primitiveValue?: primitiveTypes;
22
+ renderer?: string | (() => ReactNode);
23
+ media?: JSX.Element;
24
+ description?: string;
25
+ };
26
+ export type tableItemValueType = primitiveTypes | tableItemExpandedValueType;
27
+ type itemTypeBase = IDictionary<tableItemValueType>;
28
+ interface iPropsBase<ItemType extends itemTypeBase> {
29
+ columns: colType[];
30
+ /** item is a dictionary. Values are primitives, or tableItemExpandedValueType */
31
+ items: ItemType[];
32
+ css?: string[];
33
+ rowCss?: string[];
34
+ getItemMenu?: (item: ItemType, index: number) => iMenuItemEX[];
35
+ selectionMode?: "single" | "multiselect";
36
+ selection?: number[];
37
+ onSelectionChange?: (selected: number[]) => void;
38
+ }
39
+ interface iPropsUnfreezed<ItemType extends itemTypeBase> extends iPropsBase<ItemType> {
40
+ maxHeight: never;
41
+ }
42
+ interface iPropsFreezed<ItemType extends itemTypeBase> extends iPropsBase<ItemType> {
43
+ stickyTop?: true;
44
+ stickyLeft?: true | 1 | 2;
45
+ /** default: small - keep 40px of first cell visible. medium=80px cover=none */
46
+ stickyLeftGap?: "small" | "medium" | "cover";
47
+ /** if you want to have sticky header, with internal scroll - you must pass a max-height, for example:
48
+ * 100% or calc(100vh - 16px)
49
+ */
50
+ maxHeight?: string;
51
+ }
52
+ type iProps<ItemType extends itemTypeBase> = iPropsUnfreezed<ItemType> | iPropsFreezed<ItemType>;
53
+ export declare function TableEX<ItemType extends itemTypeBase>(props: iProps<ItemType>): import("react/jsx-runtime").JSX.Element;
54
+ export {};
@@ -0,0 +1,316 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { createTableColumn, makeStyles, Table, TableBody, TableCell, TableCellActions, TableCellLayout, TableHeader, TableHeaderCell, TableRow, TableSelectionCell, tokens, useArrowNavigationGroup, useTableFeatures, useTableSelection, useTableSort } from "@fluentui/react-components";
3
+ import { CheckboxCheckedRegular, CheckboxUncheckedRegular, ChevronCircleLeftFilled, ChevronCircleLeftRegular, ChevronCircleRightFilled, ChevronCircleRightRegular, EqualCircleFilled, EqualCircleRegular, FilterDismissRegular, FilterFilled, FilterRegular, MoreVerticalRegular } from "@fluentui/react-icons";
4
+ import { dateFormat, firstOrNull, isBoolean, isDate, isFunction, isNotEmptyString, isNullOrEmptyString, isNullOrNaN, isNullOrUndefined, isNumber, isPrimitiveValue, isString, stopEvent } from "@kwiz/common";
5
+ import { useMemo, useState } from "react";
6
+ import { mergeClassesEX } from "../styles/styles";
7
+ import { ButtonEX } from "./button";
8
+ import { DatePickerEx } from "./date";
9
+ import { Horizontal } from "./horizontal";
10
+ import { InputEx, InputNumberEx } from "./input";
11
+ import { MenuEx } from "./menu";
12
+ const cssNames = {
13
+ showOnHover: "show-hover",
14
+ sortIcon: "sort-icon",
15
+ selectableTable: "selectable-table"
16
+ };
17
+ const selectionCellWidth = 32;
18
+ const backgroundFix = {
19
+ backgroundColor: tokens.colorNeutralBackground1,
20
+ ":hover": {
21
+ color: tokens.colorNeutralForeground1Hover,
22
+ backgroundColor: tokens.colorSubtleBackgroundHover
23
+ }
24
+ };
25
+ const useStyles = makeStyles({
26
+ stickySelectionCell: Object.assign({ position: "sticky", left: 0, top: 0, zIndex: 30 }, backgroundFix),
27
+ stickySelectionHeaderCell: {
28
+ zIndex: 40
29
+ },
30
+ singleSelect: {
31
+ '&>*': { visibility: "hidden" }
32
+ },
33
+ firstCell: Object.assign(Object.assign({ position: "sticky", left: 0, zIndex: 10 }, backgroundFix), { [`&.${cssNames.selectableTable}`]: {
34
+ left: `${selectionCellWidth}px`
35
+ } }),
36
+ secondCellCover: Object.assign(Object.assign({ position: "sticky", left: '0', zIndex: 10, maxWidth: '200px' }, backgroundFix), { [`&.${cssNames.selectableTable}`]: {
37
+ left: `${selectionCellWidth}px`
38
+ } }),
39
+ secondCellSmall: Object.assign(Object.assign({ position: "sticky", left: '40px', zIndex: 10, maxWidth: '200px' }, backgroundFix), { [`&.${cssNames.selectableTable}`]: {
40
+ left: `${selectionCellWidth + 40}px`
41
+ } }),
42
+ secondCellMedium: Object.assign(Object.assign({ position: "sticky", left: '80px', zIndex: 10, maxWidth: '200px' }, backgroundFix), { [`&.${cssNames.selectableTable}`]: {
43
+ left: `${selectionCellWidth + 80}px`
44
+ } }),
45
+ th: Object.assign(Object.assign({ position: "sticky", top: 0, zIndex: 20, whiteSpace: "nowrap" }, backgroundFix), { '::after': {
46
+ content: '""',
47
+ position: "absolute",
48
+ backgroundColor: tokens.colorNeutralStroke1,
49
+ height: "1px",
50
+ left: 0, right: 0, bottom: 0
51
+ } }),
52
+ stickyColumnCell: {
53
+ '::after': {
54
+ content: '""',
55
+ position: "absolute",
56
+ backgroundColor: tokens.colorNeutralStroke1,
57
+ width: "1px",
58
+ top: 0, right: 0, bottom: 0
59
+ }
60
+ },
61
+ stickyColumnCellPre: {
62
+ '::before': {
63
+ content: '""',
64
+ position: "absolute",
65
+ backgroundColor: tokens.colorNeutralStroke2,
66
+ width: "1px",
67
+ top: 0, left: 0, bottom: 0
68
+ }
69
+ },
70
+ first2TH: {
71
+ zIndex: 30
72
+ },
73
+ table: {
74
+ tableLayout: "auto"
75
+ },
76
+ nowrap: {
77
+ whiteSpace: "nowrap"
78
+ },
79
+ //remove menu cell, rowmenu, repurpose for filter on hover
80
+ hoverParent: {
81
+ [`& .${cssNames.showOnHover}`]: {
82
+ visibility: "hidden",
83
+ },
84
+ [`:hover .${cssNames.showOnHover}`]: {
85
+ visibility: "visible"
86
+ }
87
+ }
88
+ });
89
+ export function TableEX(props) {
90
+ const { items, columns, getItemMenu, selectionMode, onSelectionChange, selection } = props;
91
+ const css = useStyles();
92
+ const fProps = props;
93
+ const freezed = fProps.stickyTop || fProps.stickyLeft || isString(props.maxHeight);
94
+ const keyboardNavAttr = useArrowNavigationGroup({ axis: "grid" });
95
+ const normalizedCols = useMemo(() => columns.map(c => isString(c) ? {
96
+ key: c,
97
+ renderer: c,
98
+ sortable: true,
99
+ } : Object.assign(Object.assign({}, c), { renderer: c.renderer || c.key })), [columns]);
100
+ // #region Styles
101
+ const secondCellClass = fProps.stickyLeftGap === "cover" ? css.secondCellCover : fProps.stickyLeftGap === "medium" ? css.secondCellMedium : css.secondCellSmall;
102
+ const headerCellClasses = fProps.stickyTop ? [css.th, css.hoverParent] : [css.hoverParent];
103
+ const firstHeaderCellClasses = headerCellClasses.slice();
104
+ const secondHeaderCellClasses = headerCellClasses.slice();
105
+ const firstCellClasses = fProps.stickyLeft ? [css.firstCell] : [];
106
+ const secondCellClasses = fProps.stickyLeft === 2 ? [secondCellClass] : [];
107
+ const selectionCellHeaderClasses = [css.stickySelectionHeaderCell];
108
+ const selectionCellClasses = [];
109
+ if (fProps.stickyLeft) {
110
+ firstHeaderCellClasses.splice(0, 0, css.firstCell);
111
+ firstHeaderCellClasses.push(css.first2TH);
112
+ if (fProps.stickyLeft === 2) {
113
+ secondHeaderCellClasses.splice(0, 0, secondCellClass);
114
+ secondHeaderCellClasses.push(css.first2TH);
115
+ secondCellClasses.push(css.stickyColumnCell);
116
+ secondCellClasses.push(css.stickyColumnCellPre);
117
+ }
118
+ else
119
+ firstCellClasses.push(css.stickyColumnCell);
120
+ }
121
+ if (isNotEmptyString(selectionMode)) {
122
+ selectionCellClasses.push(css.stickySelectionCell);
123
+ if (selectionMode === "single")
124
+ selectionCellHeaderClasses.push(css.singleSelect);
125
+ firstCellClasses.push(cssNames.selectableTable);
126
+ secondCellClasses.push(cssNames.selectableTable);
127
+ firstHeaderCellClasses.push(cssNames.selectableTable);
128
+ secondHeaderCellClasses.push(cssNames.selectableTable);
129
+ }
130
+ // #endregion
131
+ const menuIndex = isNullOrUndefined(getItemMenu) ? -1 : fProps.stickyLeft === 2 ? 1 : 0;
132
+ function normalizeColValue(colValue) {
133
+ const normalizedColValue = isPrimitiveValue(colValue)
134
+ ? {
135
+ primitiveValue: colValue, renderer: isNumber(colValue)
136
+ ? colValue.toString(10)
137
+ : isDate(colValue)
138
+ ? colValue.toDateString()
139
+ : isBoolean(colValue)
140
+ ? () => (colValue
141
+ ? _jsx(CheckboxCheckedRegular, {})
142
+ : _jsx(CheckboxUncheckedRegular, {}))
143
+ : colValue
144
+ }
145
+ : colValue;
146
+ return normalizedColValue;
147
+ }
148
+ function toPrimitiveValue(colValue) {
149
+ if (isPrimitiveValue(colValue))
150
+ return colValue;
151
+ else if (!isNullOrUndefined(colValue.primitiveValue))
152
+ return colValue.primitiveValue;
153
+ else if (isString(colValue.renderer))
154
+ return colValue.renderer;
155
+ else
156
+ return null;
157
+ }
158
+ // #region Filter
159
+ const [filter, setFilter] = useState();
160
+ const [filterop, setFilterop] = useState("eq");
161
+ const filteredItems = useMemo(() => {
162
+ if (!filter)
163
+ return items;
164
+ const filterCol = firstOrNull(normalizedCols, c => c.key === filter.column);
165
+ if (!(filterCol === null || filterCol === void 0 ? void 0 : filterCol.filter))
166
+ return items;
167
+ switch (filterCol.filter) {
168
+ case "string": {
169
+ const fValue = filter.value.toLowerCase();
170
+ return items.filter(i => {
171
+ const v = toPrimitiveValue(i[filterCol.key]);
172
+ if (isNotEmptyString(v))
173
+ return v.toLowerCase().includes(fValue);
174
+ else
175
+ return false;
176
+ });
177
+ }
178
+ case "bool": {
179
+ const fValue = filter.value === true;
180
+ return items.filter(i => {
181
+ const v = toPrimitiveValue(i[filterCol.key]);
182
+ if (fValue)
183
+ return v === true;
184
+ else
185
+ return v !== true; //false/null as false
186
+ });
187
+ }
188
+ case "number": {
189
+ const fValue = filter.value;
190
+ return items.filter(i => {
191
+ const v = toPrimitiveValue(i[filterCol.key]);
192
+ if (isNullOrNaN(v))
193
+ return false;
194
+ if (filterop === "gt")
195
+ return v >= fValue;
196
+ else if (filterop === "lt")
197
+ return v <= fValue;
198
+ else
199
+ return v === fValue;
200
+ });
201
+ }
202
+ case "date": {
203
+ const fValue = dateFormat(filter.value, "yyyyMMdd");
204
+ return items.filter(i => {
205
+ const v = toPrimitiveValue(i[filterCol.key]);
206
+ if (!isDate(v))
207
+ return false;
208
+ const vFormat = dateFormat(v, "yyyyMMdd");
209
+ if (filterop === "gt")
210
+ return vFormat >= fValue;
211
+ else if (filterop === "lt")
212
+ return vFormat <= fValue;
213
+ else
214
+ return vFormat === fValue;
215
+ });
216
+ }
217
+ }
218
+ }, [items, filter, normalizedCols, filterop]);
219
+ const filterMenuItemOperator = useMemo(() => ({
220
+ title: "Op", onClick: () => { },
221
+ as: _jsxs(Horizontal, { hSpaced: true, children: [_jsx(ButtonEX, { icon: filterop === "lt" ? _jsx(ChevronCircleLeftFilled, {}) : _jsx(ChevronCircleLeftRegular, {}), title: "Less than", onClick: () => setFilterop("lt") }), _jsx(ButtonEX, { icon: filterop === "eq" ? _jsx(EqualCircleFilled, {}) : _jsx(EqualCircleRegular, {}), title: "Equals", onClick: () => setFilterop("eq") }), _jsx(ButtonEX, { icon: filterop === "gt" ? _jsx(ChevronCircleRightFilled, {}) : _jsx(ChevronCircleRightRegular, {}), title: "Greater than", onClick: () => setFilterop("gt") })] })
222
+ }), [filterop]);
223
+ // #endregion
224
+ // #region Sort and Select
225
+ const table_columns = useMemo(() => normalizedCols.map(col => createTableColumn({
226
+ columnId: col.key,
227
+ compare: (a, b) => {
228
+ const var1 = toPrimitiveValue(a[col.key]);
229
+ const var2 = toPrimitiveValue(b[col.key]);
230
+ if (isNullOrUndefined(var1) && isNullOrUndefined(var2))
231
+ return 0;
232
+ else if (isNullOrUndefined(var1))
233
+ return -1;
234
+ else if (isNullOrUndefined(var2))
235
+ return 1;
236
+ const var1x = isDate(var1) ? var1.getTime() : isBoolean(var1) ? var1 ? 1 : 0 : var1;
237
+ const var2x = isDate(var2) ? var2.getTime() : isBoolean(var2) ? var2 ? 1 : 0 : var2;
238
+ //both not null and must be same value type
239
+ return isString(var1x)
240
+ ? var1x.localeCompare(var2)
241
+ : var1x - var2x;
242
+ }
243
+ })), [normalizedCols]);
244
+ const table_features = useTableFeatures({ columns: table_columns, items: filteredItems }, [
245
+ useTableSort({
246
+ defaultSortState: { sortColumn: normalizedCols[0].key, sortDirection: "ascending" }
247
+ }),
248
+ useTableSelection({
249
+ selectionMode,
250
+ selectedItems: selection,
251
+ onSelectionChange: (e, data) => {
252
+ onSelectionChange === null || onSelectionChange === void 0 ? void 0 : onSelectionChange([...data.selectedItems]);
253
+ }
254
+ })
255
+ ]);
256
+ const headerSortProps = (columnId) => ({
257
+ onClick: (e) => {
258
+ table_features.sort.toggleColumnSort(e, columnId);
259
+ },
260
+ sortDirection: table_features.sort.getSortDirection(columnId),
261
+ });
262
+ const rows = table_features.sort.sort(table_features.getRows());
263
+ // #endregion
264
+ const tbl = _jsxs(Table, Object.assign({ className: mergeClassesEX(css.table, props.css) }, keyboardNavAttr, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [isNotEmptyString(selectionMode) && _jsx(TableSelectionCell, { type: "checkbox", className: mergeClassesEX(selectionCellClasses, selectionCellHeaderClasses), checked: table_features.selection.allRowsSelected ? true : table_features.selection.someRowsSelected ? "mixed" : false, onClick: selectionMode === "multiselect"
265
+ ? table_features.selection.toggleAllRows : undefined, onKeyDown: selectionMode === "multiselect"
266
+ ? (e) => {
267
+ if (e.key === " ") {
268
+ stopEvent(e);
269
+ table_features.selection.toggleAllRows(e);
270
+ }
271
+ } : undefined }), normalizedCols.map((col, coli) => _jsxs(TableHeaderCell, Object.assign({ className: mergeClassesEX((coli === 0 ? firstHeaderCellClasses : coli === 1 ? secondHeaderCellClasses : headerCellClasses), col.headerCss, col.nowrap ? css.nowrap : undefined) }, (col.sortable ? headerSortProps(col.key) : {}), { children: [isString(col.renderer) ? col.renderer : col.renderer(), col.filter
272
+ //stop event to stop triggering sort...
273
+ ? _jsx("div", { onClick: (e) => stopEvent(e), children: _jsx(MenuEx, { trigger: {
274
+ icon: col.key === (filter === null || filter === void 0 ? void 0 : filter.column) ? _jsx(FilterFilled, {}) : _jsx(FilterRegular, {}),
275
+ title: "Filtering", className: col.key === (filter === null || filter === void 0 ? void 0 : filter.column) ? '' : cssNames.showOnHover
276
+ }, items: [...(col.filter === "string"
277
+ ? [
278
+ { title: "Filter text", onClick: () => { }, as: _jsx(InputEx, { value: (filter === null || filter === void 0 ? void 0 : filter.value) || "", onChange: (e, data) => setFilter(isNullOrEmptyString(data.value) ? null : { column: col.key, value: data.value }) }) },
279
+ ]
280
+ : col.filter === "number"
281
+ ? [
282
+ { title: "Filter number", onClick: () => { }, as: _jsx(InputNumberEx, { defaultValue: filter === null || filter === void 0 ? void 0 : filter.value, onChange: (num) => setFilter(isNullOrNaN(num) ? null : { column: col.key, value: num }) }) },
283
+ filterMenuItemOperator
284
+ ]
285
+ : col.filter === "bool"
286
+ ? [
287
+ { title: "On", icon: _jsx(CheckboxCheckedRegular, {}), onClick: () => setFilter({ column: col.key, value: true }) },
288
+ { title: "Off", icon: _jsx(CheckboxUncheckedRegular, {}), onClick: () => setFilter({ column: col.key, value: false }) }
289
+ ]
290
+ : col.filter === "date"
291
+ ? [
292
+ {
293
+ title: "Filter date", onClick: () => { }, as: _jsx(DatePickerEx, { value: filter === null || filter === void 0 ? void 0 : filter.value, onDateChange: date => {
294
+ console.log(date);
295
+ setFilter(!isDate(date) ? null : { column: col.key, value: date });
296
+ } })
297
+ },
298
+ filterMenuItemOperator
299
+ ]
300
+ : []),
301
+ { title: "Clear filter", icon: _jsx(FilterDismissRegular, {}), onClick: () => { stopEvent(window.event); setFilter(null); } },
302
+ ] }) })
303
+ : undefined] }), `h${coli}`))] }) }), _jsx(TableBody, { children: rows.map((row, rowi) => _jsxs(TableRow, { className: mergeClassesEX(props.rowCss), onClick: (e) => table_features.selection.toggleRow(e, row.rowId), onKeyDown: (e) => {
304
+ if (e.key === " ") {
305
+ stopEvent(e);
306
+ table_features.selection.toggleRow(e, row.rowId);
307
+ }
308
+ }, children: [isNotEmptyString(selectionMode) && _jsx(TableSelectionCell, { className: mergeClassesEX(selectionCellClasses), checked: table_features.selection.isRowSelected(row.rowId), type: selectionMode === "single" ? "radio" : "checkbox", radioIndicator: { "aria-label": "Select row" } }), normalizedCols.map((col, coli) => {
309
+ const normalizedColValue = normalizeColValue(row.item[col.key]);
310
+ return _jsxs(TableCell, { tabIndex: 0, role: "gridcell", className: mergeClassesEX((coli === 0 ? firstCellClasses : coli === 1 ? secondCellClasses : []), col.css, col.nowrap ? css.nowrap : undefined), children: [_jsx(TableCellLayout, { media: normalizedColValue.media, appearance: col.primary ? "primary" : undefined, description: normalizedColValue.description, children: isFunction(normalizedColValue.renderer) ? normalizedColValue.renderer() : normalizedColValue.renderer }), menuIndex === coli && _jsx(TableCellActions, { children: _jsx(MenuEx, { trigger: { icon: _jsx(MoreVerticalRegular, {}), title: "more" }, items: getItemMenu(row.item, rowi) }) })] }, `h${coli}`);
311
+ })] }, `i${rowi}`)) })] }));
312
+ return freezed
313
+ ? _jsx("div", { style: { maxHeight: fProps.maxHeight, overflow: "auto" }, children: tbl })
314
+ : tbl;
315
+ }
316
+ //# sourceMappingURL=table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/controls/table.tsx"],"names":[],"mappings":"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"}
@@ -6,5 +6,6 @@ export * from './hooks-events';
6
6
  export * from './use-alerts';
7
7
  export * from './use-editable-control';
8
8
  export * from './use-highlight';
9
+ export * from './use-reload';
9
10
  export * from './use-theme';
10
11
  export * from './use-toast';
@@ -6,6 +6,7 @@ export * from './hooks-events';
6
6
  export * from './use-alerts';
7
7
  export * from './use-editable-control';
8
8
  export * from './use-highlight';
9
+ export * from './use-reload';
9
10
  export * from './use-theme';
10
11
  export * from './use-toast';
11
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface iUseReload {
2
+ /** marker to set as dependency */
3
+ key: number;
4
+ /** call to reload */
5
+ reload: () => void;
6
+ }
7
+ /** a simple reload marker, can be used as a dependency, and called as a function */
8
+ export declare function useReload(): iUseReload;
@@ -0,0 +1,9 @@
1
+ import { debounce } from "@kwiz/common";
2
+ import { useCallback, useState } from "react";
3
+ /** a simple reload marker, can be used as a dependency, and called as a function */
4
+ export function useReload() {
5
+ const [key, setReload] = useState(1);
6
+ const reload = useCallback(() => debounce(() => { setReload(key + 1); }, 100), [key]);
7
+ return { key, reload };
8
+ }
9
+ //# sourceMappingURL=use-reload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-reload.js","sourceRoot":"","sources":["../../src/helpers/use-reload.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAQ9C,oFAAoF;AACpF,MAAM,UAAU,SAAS;IACrB,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtF,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AAC3B,CAAC"}
@@ -39,3 +39,5 @@ export declare const commonSizes: {
39
39
  /** 820 */
40
40
  extraWidthWide: number;
41
41
  };
42
+ /** calls mergeClasses handle string[] that might have multi class (split by space) elements */
43
+ export declare function mergeClassesEX(...css: (string | string[])[]): string;
@@ -1,4 +1,5 @@
1
- import { buttonClassNames, makeStyles, tokens } from "@fluentui/react-components";
1
+ import { buttonClassNames, makeStyles, mergeClasses, tokens } from "@fluentui/react-components";
2
+ import { filterEmptyEntries, isNotEmptyArray, isNotEmptyString } from "@kwiz/common";
2
3
  export const KnownClassNames = {
3
4
  print: 'print-root',
4
5
  printHide: 'print-hide',
@@ -122,4 +123,14 @@ export const commonSizes = {
122
123
  /** 820 */
123
124
  extraWidthWide: 820,
124
125
  };
126
+ /** calls mergeClasses handle string[] that might have multi class (split by space) elements */
127
+ export function mergeClassesEX(...css) {
128
+ const combined = filterEmptyEntries((css || []).flatMap(c => isNotEmptyArray(c)
129
+ ? c.flatMap(c2 => isNotEmptyString(c2)
130
+ ? c2.split(" ") : [])
131
+ : isNotEmptyString(c)
132
+ ? c.split(" ")
133
+ : []));
134
+ return mergeClasses(...combined);
135
+ }
125
136
  //# sourceMappingURL=styles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/styles/styles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/styles/styles.ts"],"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.153",
3
+ "version": "1.0.155",
4
4
  "description": "KWIZ common controls for FluentUI",
5
5
  "module": "dist/index.js",
6
6
  "types": "dist/index.d.ts",