loon-bulma-react 2023.0.23 → 2023.0.24

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.
package/README.md CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  > ## Aanpassingen
4
4
  >
5
+ > - `useSessionStoredState()`-hook gemaakt. Gebruik session-storage in plaats van local-storage om gegevens te verwijderen bij het sluiten van de tab/browser.
5
6
  > - `<CB>`-component gemaakt. Een kale checkbox met een label. Geen wrapper, geen direction, geen form.
6
7
  > - `<RB>`-component gemaakt. Een Radio-button met een label. Geen wrapper, geen direction, geen form.
7
8
  > - `ColorProp` uitgebreid met `"is-${`_string_`}"`-template literal. Als _Bulma_ nog andere kleuren gebruikt dan de standaard-kleuren, kan je die op die manier gebruiken.
@@ -80,7 +81,7 @@
80
81
  - [useDebouncedValue](#hooks-use-debounced-value)
81
82
  - [useEventListener](#hooks-use-event-listener)
82
83
  - [useHotkeys](#hooks-use-hotkeys)
83
- - [useLocalStoredState](#hooks-use-local-stored-state)
84
+ - [useLocalStoredState & useSessionStoredState](#hooks-use-local-stored-state)
84
85
  - [usePagination](#hooks-use-pagination)
85
86
  - [useToggle & useBoolToggle](#hooks-use-toggle)
86
87
  - [useUncontrolled](#hooks-use-uncontrolled)
@@ -1934,7 +1935,7 @@ Het resultaat van deze form komt via de `onSubmit()` methode naar buiten. Als de
1934
1935
  - [useDebouncedValue](#hooks-use-debounced-value)
1935
1936
  - [useEventListener](#hooks-use-event-listener)
1936
1937
  - [useHotkeys](#hooks-use-hotkeys)
1937
- - [useLocalStoredState](#hooks-use-local-stored-state)
1938
+ - [useLocalStoredState & useSessionStoredState](#hooks-use-local-stored-state)
1938
1939
  - [usePagination](#hooks-use-pagination)
1939
1940
  - [useToggle & useBoolToggle](#hooks-use-toggle)
1940
1941
  - [useUncontrolled](#hooks-use-uncontrolled)
@@ -2085,19 +2086,35 @@ function HotkeysExample() {
2085
2086
  }
2086
2087
  ```
2087
2088
 
2088
- #### useLocalStoredState() <a id="hooks-use-local-stored-state"></a>
2089
+ #### useLocalStoredState() en useSessionStoredState() <a id="hooks-use-local-stored-state"></a>
2089
2090
 
2090
- de `useLocalStoredState()`-hook werkt hetzelfde als de `React.useState()`-hook. Het enige verschil is dat de state **ook** in _Local Storage_ wordt opgeslagen, zodat de waarde na een refresh nog steeds beschikbaar is. Data wordt in _Local Storage_ opgeslagen in JSON-formaat. De return-waarde is een tuple met 3 variabelen: `[value, setValue, remove]`
2091
-
2092
- - `value`: de waarde van type `T`
2093
- - `setValue(val: T)`: een functie die de waarde als parameter ontvangt.
2094
- - `remove()`: verwijder de waarde (als die nog bestaat) uit _Local Storage_
2091
+ De `useLocalStoredState()`- en de `useSessionStoredState()`-hook werkt hetzelfde als de `React.useState()`-hook. Het enige verschil is dat de state **ook** in _Local Storage_ of de _Session Storage_ wordt opgeslagen, zodat de waarde na een refresh nog steeds beschikbaar is. Data wordt in _Local Storage_ of de _Session Storage_ opgeslagen in JSON-formaat. De return-waarde is een tuple met 3 variabelen: `[value, setValue, remove]`
2095
2092
 
2096
2093
  De hook gebruik je op bijna dezelfde manier als `useState()`:
2094
+ | Property | Type | Description |
2095
+ |----------------|----------------------|-----------------------------------------------------------------------------------------|
2096
+ | `key` | `string` | de key waar de waarde in _Local Storage_ wordt opgeslagen |
2097
+ | `defaultValue` | `T` | de waarde die gebruikt wordt als default |
2098
+ | `serialize` | `(val: T) => string` | (optioneel) de functie die de waarde `T` omzet naar een string om die te kunnen opslaan |
2099
+ | `deserialize` | `(val: string) => T` | (optioneel) de functie die eenstring uit _Local Storage_ omzet naar een waarde `T` |
2100
+
2101
+ Het verschil tussen de _Local Storage_ en de _Session Storage_ is simpel:
2102
+
2103
+ - _Local Storage_:de data blijft bewaard tot deze wordt verwijderd.
2104
+ - _Session Storage_: de data wordt verwijderd als de **browser** of de **tab** wordt gesloten.
2097
2105
 
2098
2106
  ```tsx
2099
2107
  function UseLocalStoredStateDemo() {
2100
- const [value, setValue, remove] = useLocalStoredState({ key: 'my-special-key', defaultValue: '' });
2108
+ const [value, setValue, remove] = useLocalStoredState({ key: 'my-special-key-local-storage', defaultValue: '' });
2109
+ return (
2110
+ <>
2111
+ <Input value={value} onChange={(e) => setValue(e.target.value)} />
2112
+ <Button.Primary onClick={() => remove()}>Remove value</Button.Primary>
2113
+ </>
2114
+ );
2115
+
2116
+ function UseSessionStoredStateDemo() {
2117
+ const [value, setValue, remove] = useSessionStoredState({ key: 'my-special-key-session-storage', defaultValue: '' });
2101
2118
  return (
2102
2119
  <>
2103
2120
  <Input value={value} onChange={(e) => setValue(e.target.value)} />
@@ -2107,13 +2124,7 @@ function UseLocalStoredStateDemo() {
2107
2124
  }
2108
2125
  ```
2109
2126
 
2110
- Om te zien dat de waarde in _Local Storage_ bewaard blijft, moet je de pagina refreshen nadat je de waarde hebt gewijzigd. Dan wordt de waarde uit _Local Storage_ gevuld. Anders wordt de `defaultValue` gebruikt. Het object dat als parameter wordt meegegeven aan de `useLocalStoredState()`-hook is een object met de volgende properties:
2111
- | Property | Type | Description |
2112
- |----------------|----------------------|--------------------------------------------------------------------------|
2113
- | `key` | `string` | de key waar de waarde in _Local Storage_ wordt opgeslagen |
2114
- | `defaultValue` | `T` | de waarde die gebruikt wordt als default |
2115
- | `serialize` | `(val: T) => string` | (optioneel) de functie die de waarde `T` omzet naar een string om die te kunnen opslaan |
2116
- | `deserialize` | `(val: string) => T` | (optioneel) de functie die eenstring uit _Local Storage_ omzet naar een waarde `T` |
2127
+ Om te zien dat de waarde in de _Storage_ bewaard blijft, moet je de pagina refreshen nadat je de waarde hebt gewijzigd. Dan wordt de waarde uit _Storage_ gevuld. Anders wordt de `defaultValue` gebruikt. Als je de waarde wilt verwijderen, dan kan dat met de `remove()`-functie. Om het verschil tussen _Local_ en _Session_ te zien, moet je de tab of de browser sluiten. De waarde in _Local Storage_ blijft bewaard, de waarde in _Session Storage_ wordt verwijderd.
2117
2128
 
2118
2129
  De functies `serialize` en `deserialize` hoef je alleen te implementeren als je een waarde hebt die geen gebruik van `JSON.stringify()` en `JSON.parse()` kan maken, of als er meer nodig is om dat te kunnen doen.
2119
2130
 
@@ -6,3 +6,4 @@ export * from './usePagination';
6
6
  export * from './useToggle';
7
7
  export * from './useUncontrolled';
8
8
  export * from './useValidatedState';
9
+ export * from './useSessionStoredState';
@@ -1,7 +1,3 @@
1
- /** Default serializer met `JSON.stringify` van de waar `T` naar een `string` */
2
- declare function serializeJSON<T>(value: T): string;
3
- /** Default deserializer met `JSON.parse` van een `string` naar de waarde `T` */
4
- declare function deserializeJSON<T>(value: string): T;
5
1
  declare type UseLocalStoredStateFn<T = string> = {
6
2
  /** Key to store the value with in Local Storage */
7
3
  key: string;
@@ -15,6 +11,7 @@ declare type UseLocalStoredStateFn<T = string> = {
15
11
  /**
16
12
  * Hook die werkt als `React.useState<T|undefined>()`, maar waarbij de waarde ook wordt opgeslagen in Local Storage.
17
13
  * De waarde blijft dan bij het refreshen van de pagina aanwezig. Als de pagina dan ververst wordt, word de al bestaande waarde gebruikt, niet de initialValue.
14
+ * Om de waarde te bewaren bij afsluiten van de browser, gebruik je de hook `{@link useSessionStoredState}`.
18
15
  * @param {UseLocalStoredStateFn} params voor de hook
19
16
  * @returns {[T, (value: T) => void]} tuple met een value en een setValue-function (net als React.useState)
20
17
  * @description
@@ -23,7 +20,7 @@ declare type UseLocalStoredStateFn<T = string> = {
23
20
  * | key | `string` | De key waaronder de waarde in Local Storage wordt opgeslagen. |
24
21
  * | initialValue | `T` | De initiale waarde. |
25
22
  * | serialize | `function` | (optional) functie om de waarde om te zetten naar een string. Implementeer als de waarde __GEEN__ gebruik kan maken van `JSON.stringify()`! |
26
- * | deserialize | `function` | De functie die een string omzet naar de waarde. Implementeer als de waarde __GEEN__ gebruik kan maken van `JSON.parse()`! |
23
+ * | deserialize | `function` | (optional) De functie die een string omzet naar de waarde. Implementeer als de waarde __GEEN__ gebruik kan maken van `JSON.parse()`! |
27
24
  * @example
28
25
  * import { useLocalStoredState } from 'loon-bulma-react';
29
26
  * const [ value, setValue, removeFromLocalStorage ] = useLocalStoredState({ key: 'myKey', initialValue: 'Oompa Loompa' });
@@ -34,4 +31,4 @@ declare type UseLocalStoredStateFn<T = string> = {
34
31
  * // 5. you can also check the value in Local Storage in devtools.
35
32
  */
36
33
  declare function useLocalStoredState<T extends unknown>({ key, initialValue, deserialize, serialize }: UseLocalStoredStateFn<T>): readonly [T | undefined, (value: T) => void, () => void];
37
- export { useLocalStoredState, serializeJSON, deserializeJSON };
34
+ export { useLocalStoredState };
@@ -0,0 +1,38 @@
1
+ declare type UseSessionStoredState<T = string> = {
2
+ /** Key to store the value with in Session Storage */
3
+ key: string;
4
+ /** Initial value (if its non-existent in Session Storage) */
5
+ initialValue: T;
6
+ /** Your own serializing-function. Implement when you cannot use `JSON.stringify` */
7
+ serialize?: (value: T, replacer?: (key: string, value: any) => any, space?: string | number) => string;
8
+ /** Your own deserializing-funtion. Implement when you cannot use `JSON.parse` */
9
+ deserialize?: (value: string, reviver?: (key: string, value: any) => any) => T;
10
+ };
11
+ /**
12
+ * Hook die werkt als `React.useState<T|undefined>()`, maar waarbij de waarde ook wordt opgeslagen in Session Storage.
13
+ * De waarde blijft dan bij het refreshen van de pagina aanwezig.
14
+ * Als de pagina dan ververst wordt, word de al bestaande waarde gebruikt, niet de initialValue.
15
+ * Maar als de tab of de browser gesloten wordt, dan wordt de inhoud van de session storage gewist.
16
+ * Om de waarde te bewaren bij afsluiten van de browser, gebruik je de hook `{@link useLocalStoredState}`.
17
+ * @param {UseSessionStoredState} params voor de hook
18
+ * @returns {[T, (value: T) => void]} tuple met een `value` en een `setValue`-function (net als `React.useState`)
19
+ * @description
20
+ * | Property | Type | Description |
21
+ * |--------------|------------|---------------------------------------------------------------|
22
+ * | key | `string` | De key waaronder de waarde in Session Storage wordt opgeslagen. |
23
+ * | initialValue | `T` | De initiale waarde. |
24
+ * | serialize | `function` | (optional) functie om de waarde om te zetten naar een string. Implementeer als de waarde __GEEN__ gebruik kan maken van `JSON.stringify()`! |
25
+ * | deserialize | `function` | (optional) De functie die een string omzet naar de waarde. Implementeer als de waarde __GEEN__ gebruik kan maken van `JSON.parse()`! |
26
+ * @example
27
+ * import { useSessionStoredState } from 'loon-bulma-react';
28
+ * const [ value, setValue, removeFromSessionStorage ] = useSessionStoredState({ key: 'myKey', initialValue: 'Oompa Loompa' });
29
+ * // 1. value is 'Oompa Loompa', put it somewhere on the screen
30
+ * // 2. change the value to something else
31
+ * // 3. refresh the page.
32
+ * // 4. see te new value on the page.
33
+ * // 5. you can also check the value in Local Storage in devtools.
34
+ * // 6. close the browser / tab
35
+ * // 7. check the value in session storage. it should be gone.
36
+ */
37
+ declare function useSessionStoredState<T extends unknown>({ key, initialValue, deserialize, serialize }: UseSessionStoredState<T>): readonly [T | undefined, (value: T) => void, () => void];
38
+ export { useSessionStoredState };
package/dist/index.js CHANGED
@@ -712,20 +712,22 @@ function useHotkeys(hotkeys) {
712
712
  }, [hotkeys]);
713
713
  }
714
714
 
715
- function serializeJSON(value) {
715
+ function deserializeJSON(value) {
716
716
  try {
717
- return JSON.stringify(value);
717
+ return JSON.parse(value);
718
718
  } catch (error) {
719
- throw new Error("useLocalState failed to serialize the value: " + error.message);
719
+ throw new Error("useLocalState failed to deserialize the value: " + error.message);
720
720
  }
721
721
  }
722
- function deserializeJSON(value) {
722
+
723
+ function serializeJSON(value) {
723
724
  try {
724
- return JSON.parse(value);
725
+ return JSON.stringify(value);
725
726
  } catch (error) {
726
- throw new Error("useLocalState failed to deserialize the value: " + error.message);
727
+ throw new Error("useLocalState failed to serialize the value: " + error.message);
727
728
  }
728
729
  }
730
+
729
731
  function useLocalStoredState(_ref) {
730
732
  var key = _ref.key,
731
733
  initialValue = _ref.initialValue,
@@ -916,6 +918,43 @@ function useValidatedState(initialValue, validation) {
916
918
  }, onChange];
917
919
  }
918
920
 
921
+ function useSessionStoredState(_ref) {
922
+ var key = _ref.key,
923
+ initialValue = _ref.initialValue,
924
+ _ref$deserialize = _ref.deserialize,
925
+ deserialize = _ref$deserialize === void 0 ? deserializeJSON : _ref$deserialize,
926
+ _ref$serialize = _ref.serialize,
927
+ serialize = _ref$serialize === void 0 ? serializeJSON : _ref$serialize;
928
+ var _React$useState = React__default.useState(function () {
929
+ if (typeof window === "undefined") return initialValue;
930
+ try {
931
+ var item = window.sessionStorage.getItem(key);
932
+ return item ? deserialize(item) : initialValue;
933
+ } catch (error) {
934
+ console.error("useLocalState failed to get the value: " + error.message);
935
+ return initialValue;
936
+ }
937
+ }),
938
+ storedValue = _React$useState[0],
939
+ setStoredValue = _React$useState[1];
940
+ var setValue = React__default.useCallback(function (value) {
941
+ try {
942
+ var val = value instanceof Function ? value(storedValue) : value;
943
+ setStoredValue(val);
944
+ if (typeof window !== "undefined") window.sessionStorage.setItem(key, serialize(val));
945
+ } catch (error) {
946
+ console.error("useLocalState failed to store the value: " + error.message);
947
+ }
948
+ }, []);
949
+ var remove = React__default.useCallback(function () {
950
+ if (typeof window !== "undefined") window.sessionStorage.removeItem(key);
951
+ }, []);
952
+ return [
953
+ storedValue,
954
+ setValue,
955
+ remove];
956
+ }
957
+
919
958
  function dataTableReducer(state, action) {
920
959
  switch (action.type) {
921
960
  case 'SET':
@@ -6280,6 +6319,7 @@ function TextInput(props) {
6280
6319
  touched: state.touched,
6281
6320
  outsideError: errorMsg
6282
6321
  });
6322
+ var startIcon = state.type === 'text' ? freeSolidSvgIcons.faKeyboard : state.type === 'tel' ? freeSolidSvgIcons.faPhone : freeSolidSvgIcons.faLink;
6283
6323
  return React__default.createElement(InputContainer, {
6284
6324
  size: props.size,
6285
6325
  label: label,
@@ -6310,7 +6350,10 @@ function TextInput(props) {
6310
6350
  onKeyDown: props.onKeyDown,
6311
6351
  disabled: props.disabled
6312
6352
  }), React__default.createElement(InputIcons, {
6313
- icons: props.icons,
6353
+ icons: _extends({}, {
6354
+ start: startIcon,
6355
+ end: undefined
6356
+ }, props.icons),
6314
6357
  valid: state.valid,
6315
6358
  touched: state.touched,
6316
6359
  defaultIcon: freeSolidSvgIcons.faKeyboard
@@ -7655,6 +7698,7 @@ exports.useHotkeys = useHotkeys;
7655
7698
  exports.useLocalStoredState = useLocalStoredState;
7656
7699
  exports.useNotifier = useNotifier;
7657
7700
  exports.usePagination = usePagination;
7701
+ exports.useSessionStoredState = useSessionStoredState;
7658
7702
  exports.useToggle = useToggle;
7659
7703
  exports.useUncontrolled = useUncontrolled;
7660
7704
  exports.useValidatedState = useValidatedState;