@chayns-components/textstring 5.0.60 → 5.0.61

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.
@@ -4,9 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _core = require("@chayns-components/core");
8
7
  var _react = _interopRequireWildcard(require("react"));
9
8
  var _useTextstringValue = require("../../hooks/useTextstringValue");
9
+ var _isTobitEmployee = require("../../utils/isTobitEmployee");
10
10
  var _textstring = require("../../utils/textstring");
11
11
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
12
12
  const Textstring = ({
@@ -27,7 +27,7 @@ const Textstring = ({
27
27
  const childrenOnClickFunction = children === null || children === void 0 ? void 0 : children.props.onClick;
28
28
  const handleClick = (0, _react.useCallback)(event => {
29
29
  if (event.ctrlKey) {
30
- void (0, _core.isTobitEmployee)().then(inGroup => {
30
+ void (0, _isTobitEmployee.isTobitEmployee)().then(inGroup => {
31
31
  if (inGroup) {
32
32
  (0, _textstring.selectLanguageToChange)({
33
33
  textstringName: textstring.name
@@ -1 +1 @@
1
- {"version":3,"file":"Textstring.js","names":["_core","require","_react","_interopRequireWildcard","_useTextstringValue","_textstring","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","Textstring","children","childrenClassName","childrenStyles","childrenTagName","isTextstringHTML","replacements","textstring","text","useTextstringValue","childrenOnClickFunction","props","onClick","handleClick","useCallback","event","ctrlKey","isTobitEmployee","then","inGroup","selectLanguageToChange","textstringName","name","React","cloneElement","dangerouslySetInnerHTML","__html","undefined","createElement","className","trim","style","displayName","_default","exports"],"sources":["../../../../src/components/textstring/Textstring.tsx"],"sourcesContent":["import { isTobitEmployee } from '@chayns-components/core';\nimport React, {\n CSSProperties,\n FC,\n MouseEvent,\n ReactHTML,\n useCallback,\n type ReactElement,\n} from 'react';\nimport { useTextstringValue } from '../../hooks/useTextstringValue';\nimport { selectLanguageToChange } from '../../utils/textstring';\nimport type { ITextstring, TextstringReplacement } from './types';\n\nexport type TextstringProps = {\n /**\n * The element that the text should be displayed in.\n */\n children?: ReactElement;\n /**\n * The class name of the HTML element that the text should be displayed in. Only used if `children` is not set.\n */\n childrenClassName?: string;\n /**\n * The styles of the HTML element that the text should be displayed in. Only used if `children` is not set.\n */\n childrenStyles?: CSSProperties;\n /**\n * The tag of the HTML element that the text should be displayed in. Only used if `children` is not set.\n */\n childrenTagName?: keyof ReactHTML;\n /**\n * Whether the textstring contains HTML elements and should be displayed as HTML.\n */\n isTextstringHTML?: boolean;\n /**\n * Replacement values for the textstring.\n */\n replacements?: TextstringReplacement;\n /**\n * The text that should be displayed.\n */\n textstring: ITextstring;\n};\n\nconst Textstring: FC<TextstringProps> = ({\n children,\n childrenClassName,\n childrenStyles,\n childrenTagName,\n isTextstringHTML,\n replacements,\n textstring,\n}) => {\n const text = useTextstringValue({ textstring, replacements });\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const childrenOnClickFunction = children?.props.onClick as\n | ((event: MouseEvent<HTMLElement>) => void)\n | undefined;\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLElement>) => {\n if (event.ctrlKey) {\n void isTobitEmployee().then((inGroup) => {\n if (inGroup) {\n selectLanguageToChange({\n textstringName: textstring.name,\n });\n }\n });\n } else if (typeof childrenOnClickFunction === 'function') {\n childrenOnClickFunction(event);\n }\n },\n [childrenOnClickFunction, textstring.name],\n );\n\n if (children) {\n return React.cloneElement(\n children,\n {\n dangerouslySetInnerHTML: isTextstringHTML ? { __html: text } : undefined,\n onClick: handleClick,\n },\n isTextstringHTML ? undefined : text,\n );\n }\n\n // eslint-disable-next-line react/no-danger-with-children\n return React.createElement(\n childrenTagName || 'span',\n {\n dangerouslySetInnerHTML: isTextstringHTML ? { __html: text } : undefined,\n className: `${childrenClassName || ''} notranslate`.trim(),\n onClick: handleClick,\n style: childrenStyles,\n },\n isTextstringHTML ? undefined : text,\n );\n};\n\nTextstring.displayName = 'Textstring';\n\nexport default Textstring;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Textstring.js","names":["_react","_interopRequireWildcard","require","_useTextstringValue","_isTobitEmployee","_textstring","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","Textstring","children","childrenClassName","childrenStyles","childrenTagName","isTextstringHTML","replacements","textstring","text","useTextstringValue","childrenOnClickFunction","props","onClick","handleClick","useCallback","event","ctrlKey","isTobitEmployee","then","inGroup","selectLanguageToChange","textstringName","name","React","cloneElement","dangerouslySetInnerHTML","__html","undefined","createElement","className","trim","style","displayName","_default","exports"],"sources":["../../../../src/components/textstring/Textstring.tsx"],"sourcesContent":["import React, {\n CSSProperties,\n FC,\n MouseEvent,\n ReactHTML,\n useCallback,\n type ReactElement,\n} from 'react';\nimport { useTextstringValue } from '../../hooks/useTextstringValue';\nimport { isTobitEmployee } from '../../utils/isTobitEmployee';\nimport { selectLanguageToChange } from '../../utils/textstring';\nimport type { ITextstring, TextstringReplacement } from './types';\n\nexport type TextstringProps = {\n /**\n * The element that the text should be displayed in.\n */\n children?: ReactElement;\n /**\n * The class name of the HTML element that the text should be displayed in. Only used if `children` is not set.\n */\n childrenClassName?: string;\n /**\n * The styles of the HTML element that the text should be displayed in. Only used if `children` is not set.\n */\n childrenStyles?: CSSProperties;\n /**\n * The tag of the HTML element that the text should be displayed in. Only used if `children` is not set.\n */\n childrenTagName?: keyof ReactHTML;\n /**\n * Whether the textstring contains HTML elements and should be displayed as HTML.\n */\n isTextstringHTML?: boolean;\n /**\n * Replacement values for the textstring.\n */\n replacements?: TextstringReplacement;\n /**\n * The text that should be displayed.\n */\n textstring: ITextstring;\n};\n\nconst Textstring: FC<TextstringProps> = ({\n children,\n childrenClassName,\n childrenStyles,\n childrenTagName,\n isTextstringHTML,\n replacements,\n textstring,\n}) => {\n const text = useTextstringValue({ textstring, replacements });\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const childrenOnClickFunction = children?.props.onClick as\n | ((event: MouseEvent<HTMLElement>) => void)\n | undefined;\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLElement>) => {\n if (event.ctrlKey) {\n void isTobitEmployee().then((inGroup: boolean) => {\n if (inGroup) {\n selectLanguageToChange({\n textstringName: textstring.name,\n });\n }\n });\n } else if (typeof childrenOnClickFunction === 'function') {\n childrenOnClickFunction(event);\n }\n },\n [childrenOnClickFunction, textstring.name],\n );\n\n if (children) {\n return React.cloneElement(\n children,\n {\n dangerouslySetInnerHTML: isTextstringHTML ? { __html: text } : undefined,\n onClick: handleClick,\n },\n isTextstringHTML ? undefined : text,\n );\n }\n\n // eslint-disable-next-line react/no-danger-with-children\n return React.createElement(\n childrenTagName || 'span',\n {\n dangerouslySetInnerHTML: isTextstringHTML ? { __html: text } : undefined,\n className: `${childrenClassName || ''} notranslate`.trim(),\n onClick: handleClick,\n style: childrenStyles,\n },\n isTextstringHTML ? undefined : text,\n );\n};\n\nTextstring.displayName = 'Textstring';\n\nexport default Textstring;\n"],"mappings":"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","ignoreList":[]}
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = exports.TextstringContext = void 0;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  var _textstring = require("../../utils/textstring");
9
+ var _chaynsApi = require("chayns-api");
9
10
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
10
11
  const TextstringContext = exports.TextstringContext = /*#__PURE__*/(0, _react.createContext)({});
11
12
  const TextstringProvider = ({
@@ -14,11 +15,14 @@ const TextstringProvider = ({
14
15
  language
15
16
  }) => {
16
17
  const [textstrings, setTextstrings] = (0, _react.useState)({});
18
+ const {
19
+ active
20
+ } = (0, _chaynsApi.useLanguage)();
17
21
  (0, _react.useEffect)(() => {
18
22
  const loadData = async () => {
19
23
  const textstringResult = await (0, _textstring.loadLibrary)({
20
24
  libraryName,
21
- language
25
+ language: language ?? active
22
26
  });
23
27
  if (textstringResult) {
24
28
  const prevTextstrings = window.Textstrings;
@@ -30,7 +34,7 @@ const TextstringProvider = ({
30
34
  }
31
35
  };
32
36
  void loadData();
33
- }, [language, libraryName]);
37
+ }, [active, language, libraryName]);
34
38
  return /*#__PURE__*/_react.default.createElement(TextstringContext.Provider, {
35
39
  value: textstrings
36
40
  }, children);
@@ -1 +1 @@
1
- {"version":3,"file":"TextstringProvider.js","names":["_react","_interopRequireWildcard","require","_textstring","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","TextstringContext","exports","createContext","TextstringProvider","children","libraryName","language","textstrings","setTextstrings","useState","useEffect","loadData","textstringResult","loadLibrary","prevTextstrings","window","Textstrings","createElement","Provider","value","displayName","_default"],"sources":["../../../../src/components/textstring-provider/TextstringProvider.tsx"],"sourcesContent":["import React, { createContext, FC, ReactNode, useEffect, useState } from 'react';\nimport type { TextstringValue } from '../../types/textstring';\nimport { loadLibrary } from '../../utils/textstring';\n\nexport const TextstringContext = createContext<TextstringValue>({});\n\nexport type TextstringProviderProps = {\n /**\n * The element that should use the library.\n */\n children?: ReactNode;\n /**\n * The language that should be used.\n */\n language: string;\n /**\n * The name of the library.\n */\n libraryName: string;\n};\n\nconst TextstringProvider: FC<TextstringProviderProps> = ({ children, libraryName, language }) => {\n const [textstrings, setTextstrings] = useState<TextstringValue>({});\n\n useEffect(() => {\n const loadData = async () => {\n const textstringResult = await loadLibrary({ libraryName, language });\n\n if (textstringResult) {\n const prevTextstrings = window.Textstrings;\n\n window.Textstrings = {\n ...prevTextstrings,\n [libraryName]: textstringResult,\n };\n\n setTextstrings(textstringResult);\n }\n };\n\n void loadData();\n }, [language, libraryName]);\n\n return <TextstringContext.Provider value={textstrings}>{children}</TextstringContext.Provider>;\n};\n\nTextstringProvider.displayName = 'TextstringProvider';\n\nexport default TextstringProvider;\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AAEA,IAAAC,WAAA,GAAAD,OAAA;AAAqD,SAAAD,wBAAAG,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAL,uBAAA,YAAAA,CAAAG,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAE9C,MAAMkB,iBAAiB,GAAAC,OAAA,CAAAD,iBAAA,gBAAG,IAAAE,oBAAa,EAAkB,CAAC,CAAC,CAAC;AAiBnE,MAAMC,kBAA+C,GAAGA,CAAC;EAAEC,QAAQ;EAAEC,WAAW;EAAEC;AAAS,CAAC,KAAK;EAC7F,MAAM,CAACC,WAAW,EAAEC,cAAc,CAAC,GAAG,IAAAC,eAAQ,EAAkB,CAAC,CAAC,CAAC;EAEnE,IAAAC,gBAAS,EAAC,MAAM;IACZ,MAAMC,QAAQ,GAAG,MAAAA,CAAA,KAAY;MACzB,MAAMC,gBAAgB,GAAG,MAAM,IAAAC,uBAAW,EAAC;QAAER,WAAW;QAAEC;MAAS,CAAC,CAAC;MAErE,IAAIM,gBAAgB,EAAE;QAClB,MAAME,eAAe,GAAGC,MAAM,CAACC,WAAW;QAE1CD,MAAM,CAACC,WAAW,GAAG;UACjB,GAAGF,eAAe;UAClB,CAACT,WAAW,GAAGO;QACnB,CAAC;QAEDJ,cAAc,CAACI,gBAAgB,CAAC;MACpC;IACJ,CAAC;IAED,KAAKD,QAAQ,CAAC,CAAC;EACnB,CAAC,EAAE,CAACL,QAAQ,EAAED,WAAW,CAAC,CAAC;EAE3B,oBAAO5B,MAAA,CAAAc,OAAA,CAAA0B,aAAA,CAACjB,iBAAiB,CAACkB,QAAQ;IAACC,KAAK,EAAEZ;EAAY,GAAEH,QAAqC,CAAC;AAClG,CAAC;AAEDD,kBAAkB,CAACiB,WAAW,GAAG,oBAAoB;AAAC,IAAAC,QAAA,GAAApB,OAAA,CAAAV,OAAA,GAEvCY,kBAAkB","ignoreList":[]}
1
+ {"version":3,"file":"TextstringProvider.js","names":["_react","_interopRequireWildcard","require","_textstring","_chaynsApi","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","TextstringContext","exports","createContext","TextstringProvider","children","libraryName","language","textstrings","setTextstrings","useState","active","useLanguage","useEffect","loadData","textstringResult","loadLibrary","prevTextstrings","window","Textstrings","createElement","Provider","value","displayName","_default"],"sources":["../../../../src/components/textstring-provider/TextstringProvider.tsx"],"sourcesContent":["import React, { createContext, FC, ReactNode, useEffect, useState } from 'react';\nimport type { TextstringValue } from '../../types/textstring';\nimport { loadLibrary } from '../../utils/textstring';\nimport { useLanguage } from 'chayns-api';\n\nexport const TextstringContext = createContext<TextstringValue>({});\n\nexport type TextstringProviderProps = {\n /**\n * The element that should use the library.\n */\n children?: ReactNode;\n /**\n * The language that should be used.\n */\n language?: string;\n /**\n * The name of the library.\n */\n libraryName: string;\n};\n\nconst TextstringProvider: FC<TextstringProviderProps> = ({ children, libraryName, language }) => {\n const [textstrings, setTextstrings] = useState<TextstringValue>({});\n const { active } = useLanguage();\n\n useEffect(() => {\n const loadData = async () => {\n const textstringResult = await loadLibrary({\n libraryName,\n language: language ?? active,\n });\n\n if (textstringResult) {\n const prevTextstrings = window.Textstrings;\n\n window.Textstrings = {\n ...prevTextstrings,\n [libraryName]: textstringResult,\n };\n\n setTextstrings(textstringResult);\n }\n };\n\n void loadData();\n }, [active, language, libraryName]);\n\n return <TextstringContext.Provider value={textstrings}>{children}</TextstringContext.Provider>;\n};\n\nTextstringProvider.displayName = 'TextstringProvider';\n\nexport default TextstringProvider;\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AAEA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAAyC,SAAAD,wBAAAI,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAN,uBAAA,YAAAA,CAAAI,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAElC,MAAMkB,iBAAiB,GAAAC,OAAA,CAAAD,iBAAA,gBAAG,IAAAE,oBAAa,EAAkB,CAAC,CAAC,CAAC;AAiBnE,MAAMC,kBAA+C,GAAGA,CAAC;EAAEC,QAAQ;EAAEC,WAAW;EAAEC;AAAS,CAAC,KAAK;EAC7F,MAAM,CAACC,WAAW,EAAEC,cAAc,CAAC,GAAG,IAAAC,eAAQ,EAAkB,CAAC,CAAC,CAAC;EACnE,MAAM;IAAEC;EAAO,CAAC,GAAG,IAAAC,sBAAW,EAAC,CAAC;EAEhC,IAAAC,gBAAS,EAAC,MAAM;IACZ,MAAMC,QAAQ,GAAG,MAAAA,CAAA,KAAY;MACzB,MAAMC,gBAAgB,GAAG,MAAM,IAAAC,uBAAW,EAAC;QACvCV,WAAW;QACXC,QAAQ,EAAEA,QAAQ,IAAII;MAC1B,CAAC,CAAC;MAEF,IAAII,gBAAgB,EAAE;QAClB,MAAME,eAAe,GAAGC,MAAM,CAACC,WAAW;QAE1CD,MAAM,CAACC,WAAW,GAAG;UACjB,GAAGF,eAAe;UAClB,CAACX,WAAW,GAAGS;QACnB,CAAC;QAEDN,cAAc,CAACM,gBAAgB,CAAC;MACpC;IACJ,CAAC;IAED,KAAKD,QAAQ,CAAC,CAAC;EACnB,CAAC,EAAE,CAACH,MAAM,EAAEJ,QAAQ,EAAED,WAAW,CAAC,CAAC;EAEnC,oBAAO7B,MAAA,CAAAe,OAAA,CAAA4B,aAAA,CAACnB,iBAAiB,CAACoB,QAAQ;IAACC,KAAK,EAAEd;EAAY,GAAEH,QAAqC,CAAC;AAClG,CAAC;AAEDD,kBAAkB,CAACmB,WAAW,GAAG,oBAAoB;AAAC,IAAAC,QAAA,GAAAtB,OAAA,CAAAV,OAAA,GAEvCY,kBAAkB","ignoreList":[]}
package/lib/cjs/index.js CHANGED
@@ -27,6 +27,12 @@ Object.defineProperty(exports, "initTextstrings", {
27
27
  return _textstring.initTextstrings;
28
28
  }
29
29
  });
30
+ Object.defineProperty(exports, "ttsToITextString", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _textstring.ttsToITextString;
34
+ }
35
+ });
30
36
  Object.defineProperty(exports, "useTextstringValue", {
31
37
  enumerable: true,
32
38
  get: function () {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_TextstringProvider","_interopRequireDefault","require","_Textstring","_useTextstringValue","_textstring","e","__esModule","default"],"sources":["../../src/index.ts"],"sourcesContent":["// noinspection JSUnusedGlobalSymbols\n\nexport { default as TextstringProvider } from './components/textstring-provider/TextstringProvider';\nexport { default as Textstring } from './components/textstring/Textstring';\nexport type { ITextstring, TextstringReplacement } from './components/textstring/types';\nexport { useTextstringValue } from './hooks/useTextstringValue';\nexport { getTextstringValue, initTextstrings } from './utils/textstring';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,IAAAA,mBAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,WAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEA,IAAAE,mBAAA,GAAAF,OAAA;AACA,IAAAG,WAAA,GAAAH,OAAA;AAAyE,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_TextstringProvider","_interopRequireDefault","require","_Textstring","_useTextstringValue","_textstring","e","__esModule","default"],"sources":["../../src/index.ts"],"sourcesContent":["// noinspection JSUnusedGlobalSymbols\n\nexport { default as TextstringProvider } from './components/textstring-provider/TextstringProvider';\nexport { default as Textstring } from './components/textstring/Textstring';\nexport type { ITextstring, TextstringReplacement } from './components/textstring/types';\nexport { useTextstringValue } from './hooks/useTextstringValue';\nexport { getTextstringValue, initTextstrings, ttsToITextString } from './utils/textstring';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,IAAAA,mBAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,WAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEA,IAAAE,mBAAA,GAAAF,OAAA;AACA,IAAAG,WAAA,GAAAH,OAAA;AAA2F,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA","ignoreList":[]}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isTobitEmployee = void 0;
7
+ var _uacService = require("@chayns/uac-service");
8
+ var _chaynsApi = require("chayns-api");
9
+ const client = new _uacService.UacServiceClient({
10
+ getToken: async () => (await (0, _chaynsApi.getAccessToken)()).accessToken || '',
11
+ getDefaultSiteId: () => (0, _chaynsApi.getSite)().id,
12
+ getDefaultPersonId: () => {
13
+ var _getUser;
14
+ return ((_getUser = (0, _chaynsApi.getUser)()) === null || _getUser === void 0 ? void 0 : _getUser.personId) || '';
15
+ },
16
+ getLanguage: () => (0, _chaynsApi.getLanguage)().active
17
+ });
18
+ const isTobitEmployee = async () => {
19
+ const siteInfos = await client.getMembershipSites({
20
+ groupId: 8255
21
+ });
22
+ let isEmployee = false;
23
+ siteInfos.forEach(({
24
+ siteId
25
+ }) => {
26
+ isEmployee = siteId === '60038-22141';
27
+ });
28
+ return isEmployee;
29
+ };
30
+ exports.isTobitEmployee = isTobitEmployee;
31
+ //# sourceMappingURL=isTobitEmployee.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isTobitEmployee.js","names":["_uacService","require","_chaynsApi","client","UacServiceClient","getToken","getAccessToken","accessToken","getDefaultSiteId","getSite","id","getDefaultPersonId","_getUser","getUser","personId","getLanguage","active","isTobitEmployee","siteInfos","getMembershipSites","groupId","isEmployee","forEach","siteId","exports"],"sources":["../../../src/utils/isTobitEmployee.ts"],"sourcesContent":["import { UacServiceClient } from '@chayns/uac-service';\nimport { getAccessToken, getLanguage, getSite, getUser } from 'chayns-api';\n\nconst client = new UacServiceClient({\n getToken: async () => (await getAccessToken()).accessToken || '',\n getDefaultSiteId: () => getSite().id,\n getDefaultPersonId: () => getUser()?.personId || '',\n getLanguage: () => getLanguage().active,\n});\n\nexport const isTobitEmployee = async () => {\n const siteInfos = await client.getMembershipSites({ groupId: 8255 });\n\n let isEmployee = false;\n\n siteInfos.forEach(({ siteId }) => {\n isEmployee = siteId === '60038-22141';\n });\n\n return isEmployee;\n};\n"],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AAEA,MAAME,MAAM,GAAG,IAAIC,4BAAgB,CAAC;EAChCC,QAAQ,EAAE,MAAAA,CAAA,KAAY,CAAC,MAAM,IAAAC,yBAAc,EAAC,CAAC,EAAEC,WAAW,IAAI,EAAE;EAChEC,gBAAgB,EAAEA,CAAA,KAAM,IAAAC,kBAAO,EAAC,CAAC,CAACC,EAAE;EACpCC,kBAAkB,EAAEA,CAAA;IAAA,IAAAC,QAAA;IAAA,OAAM,EAAAA,QAAA,OAAAC,kBAAO,EAAC,CAAC,cAAAD,QAAA,uBAATA,QAAA,CAAWE,QAAQ,KAAI,EAAE;EAAA;EACnDC,WAAW,EAAEA,CAAA,KAAM,IAAAA,sBAAW,EAAC,CAAC,CAACC;AACrC,CAAC,CAAC;AAEK,MAAMC,eAAe,GAAG,MAAAA,CAAA,KAAY;EACvC,MAAMC,SAAS,GAAG,MAAMf,MAAM,CAACgB,kBAAkB,CAAC;IAAEC,OAAO,EAAE;EAAK,CAAC,CAAC;EAEpE,IAAIC,UAAU,GAAG,KAAK;EAEtBH,SAAS,CAACI,OAAO,CAAC,CAAC;IAAEC;EAAO,CAAC,KAAK;IAC9BF,UAAU,GAAGE,MAAM,KAAK,aAAa;EACzC,CAAC,CAAC;EAEF,OAAOF,UAAU;AACrB,CAAC;AAACG,OAAA,CAAAP,eAAA,GAAAA,eAAA","ignoreList":[]}
@@ -3,17 +3,55 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.selectLanguageToChange = exports.loadLibrary = exports.initTextstrings = exports.getTextstringValue = void 0;
6
+ exports.ttsToITextString = exports.selectLanguageToChange = exports.loadLibrary = exports.initTextstrings = exports.getTextstringValue = void 0;
7
7
  var _chaynsApi = require("chayns-api");
8
+ const libraryCache = new Map();
9
+ const loadingLibraries = new Map();
10
+ const getCacheKey = ({
11
+ libraryName,
12
+ language
13
+ }) => `${libraryName}::${language}`;
14
+ const storeTextstrings = (cacheKey, libraryName, value) => {
15
+ libraryCache.set(cacheKey, value);
16
+ if (typeof window !== 'undefined') {
17
+ const prevTextstrings = window.Textstrings;
18
+ window.Textstrings = {
19
+ ...prevTextstrings,
20
+ [libraryName]: value
21
+ };
22
+ }
23
+ };
8
24
  const loadLibrary = async ({
9
25
  language,
10
26
  libraryName
11
27
  }) => {
12
- const response = await fetch(`https://webapi.tobit.com/TextstringService/v1.0/LangStrings/${libraryName}?language=${language}`);
13
- if (response.status !== 200) {
14
- return null;
28
+ const cacheKey = getCacheKey({
29
+ libraryName,
30
+ language
31
+ });
32
+ const cached = libraryCache.get(cacheKey);
33
+ if (cached) {
34
+ return cached;
35
+ }
36
+ const loading = loadingLibraries.get(cacheKey);
37
+ if (loading) {
38
+ return loading;
39
+ }
40
+ const request = (async () => {
41
+ const response = await fetch(`https://webapi.tobit.com/TextstringService/v1.0/LangStrings/${libraryName}?language=${language}`);
42
+ if (response.status !== 200) {
43
+ return null;
44
+ }
45
+ const value = await response.json();
46
+ storeTextstrings(cacheKey, libraryName, value);
47
+ return value;
48
+ })();
49
+ loadingLibraries.set(cacheKey, request);
50
+ try {
51
+ return await request;
52
+ } finally {
53
+ loadingLibraries.delete(cacheKey);
15
54
  }
16
- return await response.json();
17
55
  };
18
56
  exports.loadLibrary = loadLibrary;
19
57
  const selectLanguageToChange = ({
@@ -42,11 +80,10 @@ const initTextstrings = ({
42
80
  language
43
81
  }).then(result => {
44
82
  if (result) {
45
- const prevTextstrings = window.Textstrings;
46
- window.Textstrings = {
47
- ...prevTextstrings,
48
- [libraryName]: result
49
- };
83
+ storeTextstrings(getCacheKey({
84
+ libraryName,
85
+ language
86
+ }), libraryName, result);
50
87
  }
51
88
  });
52
89
  };
@@ -71,4 +108,17 @@ const getTextstringValue = ({
71
108
  return Object.keys(replacements).reduce((current, key) => current.replace(new RegExp(key, 'g'), replacements[key] || ''), value);
72
109
  };
73
110
  exports.getTextstringValue = getTextstringValue;
111
+ const ttsToITextString = textString => {
112
+ if (typeof textString === 'string') {
113
+ return {
114
+ name: textString,
115
+ fallback: textString
116
+ };
117
+ }
118
+ return {
119
+ name: textString.stringName,
120
+ fallback: textString.fallback
121
+ };
122
+ };
123
+ exports.ttsToITextString = ttsToITextString;
74
124
  //# sourceMappingURL=textstring.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"textstring.js","names":["_chaynsApi","require","loadLibrary","language","libraryName","response","fetch","status","json","exports","selectLanguageToChange","textstringName","dialog","iFrame","url","buttons","input","textstring","initTextstrings","then","result","prevTextstrings","window","Textstrings","getTextstringValue","replacements","_window$Textstrings","textstrings","undefined","fallback","Object","keys","reduce","current","key","replace","RegExp","value","name"],"sources":["../../../src/utils/textstring.ts"],"sourcesContent":["import { dialog } from 'chayns-api';\nimport type { ITextstring, TextstringReplacement } from '../components/textstring/types';\nimport type { TextstringValue } from '../types/textstring';\n\ninterface LoadLibraryOptions {\n libraryName: string;\n language: string;\n}\n\nexport const loadLibrary = async ({ language, libraryName }: LoadLibraryOptions) => {\n const response = await fetch(\n `https://webapi.tobit.com/TextstringService/v1.0/LangStrings/${libraryName}?language=${language}`,\n );\n\n if (response.status !== 200) {\n return null;\n }\n\n return (await response.json()) as TextstringValue;\n};\n\ninterface SelectLanguageToChangeOptions {\n textstringName: string;\n}\n\nexport const selectLanguageToChange = ({ textstringName }: SelectLanguageToChangeOptions) => {\n // Note: the page is in v4\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n void dialog.iFrame({\n url: 'https://tapp-staging.chayns-static.space/text-string-tapp/v1/iframe-edit.html',\n buttons: [],\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n input: { textstring: textstringName },\n });\n};\n\ninterface InitTextstringsOptions {\n /**\n * The language that should be used.\n */\n language: string;\n /**\n * The name of the library.\n */\n libraryName: string;\n}\n\nexport const initTextstrings = ({ libraryName, language }: InitTextstringsOptions) => {\n void loadLibrary({ libraryName, language }).then((result) => {\n if (result) {\n const prevTextstrings = window.Textstrings;\n\n window.Textstrings = {\n ...prevTextstrings,\n [libraryName]: result,\n };\n }\n });\n};\n\ninterface GetTextstringValueOptions {\n textstring: ITextstring;\n libraryName: string;\n replacements?: TextstringReplacement;\n}\n\nexport const getTextstringValue = ({\n libraryName,\n textstring,\n replacements,\n}: GetTextstringValueOptions): string => {\n const textstrings =\n typeof window !== 'undefined' ? window.Textstrings?.[libraryName] : undefined;\n\n if (!textstrings) {\n if (!replacements) {\n return textstring.fallback;\n }\n\n return Object.keys(replacements).reduce(\n (current, key) =>\n current.replace(new RegExp(key, 'g'), <string>replacements[key] || ''),\n textstring.fallback,\n );\n }\n\n const value = textstrings[textstring.name] ?? textstring.fallback;\n\n if (!replacements) {\n return value;\n }\n\n return Object.keys(replacements).reduce(\n (current, key) => current.replace(new RegExp(key, 'g'), <string>replacements[key] || ''),\n value,\n );\n};\n"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AASO,MAAMC,WAAW,GAAG,MAAAA,CAAO;EAAEC,QAAQ;EAAEC;AAAgC,CAAC,KAAK;EAChF,MAAMC,QAAQ,GAAG,MAAMC,KAAK,CACxB,+DAA+DF,WAAW,aAAaD,QAAQ,EACnG,CAAC;EAED,IAAIE,QAAQ,CAACE,MAAM,KAAK,GAAG,EAAE;IACzB,OAAO,IAAI;EACf;EAEA,OAAQ,MAAMF,QAAQ,CAACG,IAAI,CAAC,CAAC;AACjC,CAAC;AAACC,OAAA,CAAAP,WAAA,GAAAA,WAAA;AAMK,MAAMQ,sBAAsB,GAAGA,CAAC;EAAEC;AAA8C,CAAC,KAAK;EACzF;EACA;EACA;EACA,KAAKC,iBAAM,CAACC,MAAM,CAAC;IACfC,GAAG,EAAE,+EAA+E;IACpFC,OAAO,EAAE,EAAE;IACX;IACA;IACAC,KAAK,EAAE;MAAEC,UAAU,EAAEN;IAAe;EACxC,CAAC,CAAC;AACN,CAAC;AAACF,OAAA,CAAAC,sBAAA,GAAAA,sBAAA;AAaK,MAAMQ,eAAe,GAAGA,CAAC;EAAEd,WAAW;EAAED;AAAiC,CAAC,KAAK;EAClF,KAAKD,WAAW,CAAC;IAAEE,WAAW;IAAED;EAAS,CAAC,CAAC,CAACgB,IAAI,CAAEC,MAAM,IAAK;IACzD,IAAIA,MAAM,EAAE;MACR,MAAMC,eAAe,GAAGC,MAAM,CAACC,WAAW;MAE1CD,MAAM,CAACC,WAAW,GAAG;QACjB,GAAGF,eAAe;QAClB,CAACjB,WAAW,GAAGgB;MACnB,CAAC;IACL;EACJ,CAAC,CAAC;AACN,CAAC;AAACX,OAAA,CAAAS,eAAA,GAAAA,eAAA;AAQK,MAAMM,kBAAkB,GAAGA,CAAC;EAC/BpB,WAAW;EACXa,UAAU;EACVQ;AACuB,CAAC,KAAa;EAAA,IAAAC,mBAAA;EACrC,MAAMC,WAAW,GACb,OAAOL,MAAM,KAAK,WAAW,IAAAI,mBAAA,GAAGJ,MAAM,CAACC,WAAW,cAAAG,mBAAA,uBAAlBA,mBAAA,CAAqBtB,WAAW,CAAC,GAAGwB,SAAS;EAEjF,IAAI,CAACD,WAAW,EAAE;IACd,IAAI,CAACF,YAAY,EAAE;MACf,OAAOR,UAAU,CAACY,QAAQ;IAC9B;IAEA,OAAOC,MAAM,CAACC,IAAI,CAACN,YAAY,CAAC,CAACO,MAAM,CACnC,CAACC,OAAO,EAAEC,GAAG,KACTD,OAAO,CAACE,OAAO,CAAC,IAAIC,MAAM,CAACF,GAAG,EAAE,GAAG,CAAC,EAAUT,YAAY,CAACS,GAAG,CAAC,IAAI,EAAE,CAAC,EAC1EjB,UAAU,CAACY,QACf,CAAC;EACL;EAEA,MAAMQ,KAAK,GAAGV,WAAW,CAACV,UAAU,CAACqB,IAAI,CAAC,IAAIrB,UAAU,CAACY,QAAQ;EAEjE,IAAI,CAACJ,YAAY,EAAE;IACf,OAAOY,KAAK;EAChB;EAEA,OAAOP,MAAM,CAACC,IAAI,CAACN,YAAY,CAAC,CAACO,MAAM,CACnC,CAACC,OAAO,EAAEC,GAAG,KAAKD,OAAO,CAACE,OAAO,CAAC,IAAIC,MAAM,CAACF,GAAG,EAAE,GAAG,CAAC,EAAUT,YAAY,CAACS,GAAG,CAAC,IAAI,EAAE,CAAC,EACxFG,KACJ,CAAC;AACL,CAAC;AAAC5B,OAAA,CAAAe,kBAAA,GAAAA,kBAAA","ignoreList":[]}
1
+ {"version":3,"file":"textstring.js","names":["_chaynsApi","require","libraryCache","Map","loadingLibraries","getCacheKey","libraryName","language","storeTextstrings","cacheKey","value","set","window","prevTextstrings","Textstrings","loadLibrary","cached","get","loading","request","response","fetch","status","json","delete","exports","selectLanguageToChange","textstringName","dialog","iFrame","url","buttons","input","textstring","initTextstrings","then","result","getTextstringValue","replacements","_window$Textstrings","textstrings","undefined","fallback","Object","keys","reduce","current","key","replace","RegExp","name","ttsToITextString","textString","stringName"],"sources":["../../../src/utils/textstring.ts"],"sourcesContent":["import { dialog } from 'chayns-api';\nimport type { ITextstring, TextstringReplacement } from '../components/textstring/types';\nimport type { TextstringValue } from '../types/textstring';\n\nconst libraryCache = new Map<string, TextstringValue>();\nconst loadingLibraries = new Map<string, Promise<TextstringValue | null>>();\n\ninterface LoadLibraryOptions {\n libraryName: string;\n language: string;\n}\n\nconst getCacheKey = ({ libraryName, language }: LoadLibraryOptions) =>\n `${libraryName}::${language}`;\n\nconst storeTextstrings = (cacheKey: string, libraryName: string, value: TextstringValue) => {\n libraryCache.set(cacheKey, value);\n\n if (typeof window !== 'undefined') {\n const prevTextstrings = window.Textstrings;\n\n window.Textstrings = {\n ...prevTextstrings,\n [libraryName]: value,\n };\n }\n};\n\nexport const loadLibrary = async ({ language, libraryName }: LoadLibraryOptions) => {\n const cacheKey = getCacheKey({ libraryName, language });\n const cached = libraryCache.get(cacheKey);\n\n if (cached) {\n return cached;\n }\n\n const loading = loadingLibraries.get(cacheKey);\n\n if (loading) {\n return loading;\n }\n\n const request = (async () => {\n const response = await fetch(\n `https://webapi.tobit.com/TextstringService/v1.0/LangStrings/${libraryName}?language=${language}`,\n );\n\n if (response.status !== 200) {\n return null;\n }\n\n const value = (await response.json()) as TextstringValue;\n\n storeTextstrings(cacheKey, libraryName, value);\n\n return value;\n })();\n\n loadingLibraries.set(cacheKey, request);\n\n try {\n return await request;\n } finally {\n loadingLibraries.delete(cacheKey);\n }\n};\n\ninterface SelectLanguageToChangeOptions {\n textstringName: string;\n}\n\nexport const selectLanguageToChange = ({ textstringName }: SelectLanguageToChangeOptions) => {\n // Note: the page is in v4\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n void dialog.iFrame({\n url: 'https://tapp-staging.chayns-static.space/text-string-tapp/v1/iframe-edit.html',\n buttons: [],\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n input: { textstring: textstringName },\n });\n};\n\ninterface InitTextstringsOptions {\n /**\n * The language that should be used.\n */\n language: string;\n /**\n * The name of the library.\n */\n libraryName: string;\n}\n\nexport const initTextstrings = ({ libraryName, language }: InitTextstringsOptions) => {\n void loadLibrary({ libraryName, language }).then((result) => {\n if (result) {\n storeTextstrings(getCacheKey({ libraryName, language }), libraryName, result);\n }\n });\n};\n\ninterface GetTextstringValueOptions {\n textstring: ITextstring;\n libraryName: string;\n replacements?: TextstringReplacement;\n}\n\nexport const getTextstringValue = ({\n libraryName,\n textstring,\n replacements,\n}: GetTextstringValueOptions): string => {\n const textstrings =\n typeof window !== 'undefined' ? window.Textstrings?.[libraryName] : undefined;\n\n if (!textstrings) {\n if (!replacements) {\n return textstring.fallback;\n }\n\n return Object.keys(replacements).reduce(\n (current, key) =>\n current.replace(new RegExp(key, 'g'), <string>replacements[key] || ''),\n textstring.fallback,\n );\n }\n\n const value = textstrings[textstring.name] ?? textstring.fallback;\n\n if (!replacements) {\n return value;\n }\n\n return Object.keys(replacements).reduce(\n (current, key) => current.replace(new RegExp(key, 'g'), <string>replacements[key] || ''),\n value,\n );\n};\n\ninterface TtsToITextStringOptions {\n stringName: string;\n fallback: string;\n}\nexport const ttsToITextString = (\n textString: TtsToITextStringOptions | string,\n): { name: string; fallback: string } => {\n if (typeof textString === 'string') {\n return { name: textString, fallback: textString };\n }\n return {\n name: textString.stringName,\n fallback: textString.fallback,\n };\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,6 @@
1
- import { isTobitEmployee } from '@chayns-components/core';
2
1
  import React, { useCallback } from 'react';
3
2
  import { useTextstringValue } from '../../hooks/useTextstringValue';
3
+ import { isTobitEmployee } from '../../utils/isTobitEmployee';
4
4
  import { selectLanguageToChange } from '../../utils/textstring';
5
5
  const Textstring = ({
6
6
  children,
@@ -1 +1 @@
1
- {"version":3,"file":"Textstring.js","names":["isTobitEmployee","React","useCallback","useTextstringValue","selectLanguageToChange","Textstring","children","childrenClassName","childrenStyles","childrenTagName","isTextstringHTML","replacements","textstring","text","childrenOnClickFunction","props","onClick","handleClick","event","ctrlKey","then","inGroup","textstringName","name","cloneElement","dangerouslySetInnerHTML","__html","undefined","createElement","className","trim","style","displayName"],"sources":["../../../../src/components/textstring/Textstring.tsx"],"sourcesContent":["import { isTobitEmployee } from '@chayns-components/core';\nimport React, {\n CSSProperties,\n FC,\n MouseEvent,\n ReactHTML,\n useCallback,\n type ReactElement,\n} from 'react';\nimport { useTextstringValue } from '../../hooks/useTextstringValue';\nimport { selectLanguageToChange } from '../../utils/textstring';\nimport type { ITextstring, TextstringReplacement } from './types';\n\nexport type TextstringProps = {\n /**\n * The element that the text should be displayed in.\n */\n children?: ReactElement;\n /**\n * The class name of the HTML element that the text should be displayed in. Only used if `children` is not set.\n */\n childrenClassName?: string;\n /**\n * The styles of the HTML element that the text should be displayed in. Only used if `children` is not set.\n */\n childrenStyles?: CSSProperties;\n /**\n * The tag of the HTML element that the text should be displayed in. Only used if `children` is not set.\n */\n childrenTagName?: keyof ReactHTML;\n /**\n * Whether the textstring contains HTML elements and should be displayed as HTML.\n */\n isTextstringHTML?: boolean;\n /**\n * Replacement values for the textstring.\n */\n replacements?: TextstringReplacement;\n /**\n * The text that should be displayed.\n */\n textstring: ITextstring;\n};\n\nconst Textstring: FC<TextstringProps> = ({\n children,\n childrenClassName,\n childrenStyles,\n childrenTagName,\n isTextstringHTML,\n replacements,\n textstring,\n}) => {\n const text = useTextstringValue({ textstring, replacements });\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const childrenOnClickFunction = children?.props.onClick as\n | ((event: MouseEvent<HTMLElement>) => void)\n | undefined;\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLElement>) => {\n if (event.ctrlKey) {\n void isTobitEmployee().then((inGroup) => {\n if (inGroup) {\n selectLanguageToChange({\n textstringName: textstring.name,\n });\n }\n });\n } else if (typeof childrenOnClickFunction === 'function') {\n childrenOnClickFunction(event);\n }\n },\n [childrenOnClickFunction, textstring.name],\n );\n\n if (children) {\n return React.cloneElement(\n children,\n {\n dangerouslySetInnerHTML: isTextstringHTML ? { __html: text } : undefined,\n onClick: handleClick,\n },\n isTextstringHTML ? undefined : text,\n );\n }\n\n // eslint-disable-next-line react/no-danger-with-children\n return React.createElement(\n childrenTagName || 'span',\n {\n dangerouslySetInnerHTML: isTextstringHTML ? { __html: text } : undefined,\n className: `${childrenClassName || ''} notranslate`.trim(),\n onClick: handleClick,\n style: childrenStyles,\n },\n isTextstringHTML ? undefined : text,\n );\n};\n\nTextstring.displayName = 'Textstring';\n\nexport default Textstring;\n"],"mappings":"AAAA,SAASA,eAAe,QAAQ,yBAAyB;AACzD,OAAOC,KAAK,IAKRC,WAAW,QAER,OAAO;AACd,SAASC,kBAAkB,QAAQ,gCAAgC;AACnE,SAASC,sBAAsB,QAAQ,wBAAwB;AAkC/D,MAAMC,UAA+B,GAAGA,CAAC;EACrCC,QAAQ;EACRC,iBAAiB;EACjBC,cAAc;EACdC,eAAe;EACfC,gBAAgB;EAChBC,YAAY;EACZC;AACJ,CAAC,KAAK;EACF,MAAMC,IAAI,GAAGV,kBAAkB,CAAC;IAAES,UAAU;IAAED;EAAa,CAAC,CAAC;;EAE7D;EACA,MAAMG,uBAAuB,GAAGR,QAAQ,EAAES,KAAK,CAACC,OAEjC;EAEf,MAAMC,WAAW,GAAGf,WAAW,CAC1BgB,KAA8B,IAAK;IAChC,IAAIA,KAAK,CAACC,OAAO,EAAE;MACf,KAAKnB,eAAe,CAAC,CAAC,CAACoB,IAAI,CAAEC,OAAO,IAAK;QACrC,IAAIA,OAAO,EAAE;UACTjB,sBAAsB,CAAC;YACnBkB,cAAc,EAAEV,UAAU,CAACW;UAC/B,CAAC,CAAC;QACN;MACJ,CAAC,CAAC;IACN,CAAC,MAAM,IAAI,OAAOT,uBAAuB,KAAK,UAAU,EAAE;MACtDA,uBAAuB,CAACI,KAAK,CAAC;IAClC;EACJ,CAAC,EACD,CAACJ,uBAAuB,EAAEF,UAAU,CAACW,IAAI,CAC7C,CAAC;EAED,IAAIjB,QAAQ,EAAE;IACV,oBAAOL,KAAK,CAACuB,YAAY,CACrBlB,QAAQ,EACR;MACImB,uBAAuB,EAAEf,gBAAgB,GAAG;QAAEgB,MAAM,EAAEb;MAAK,CAAC,GAAGc,SAAS;MACxEX,OAAO,EAAEC;IACb,CAAC,EACDP,gBAAgB,GAAGiB,SAAS,GAAGd,IACnC,CAAC;EACL;;EAEA;EACA,oBAAOZ,KAAK,CAAC2B,aAAa,CACtBnB,eAAe,IAAI,MAAM,EACzB;IACIgB,uBAAuB,EAAEf,gBAAgB,GAAG;MAAEgB,MAAM,EAAEb;IAAK,CAAC,GAAGc,SAAS;IACxEE,SAAS,EAAE,GAAGtB,iBAAiB,IAAI,EAAE,cAAc,CAACuB,IAAI,CAAC,CAAC;IAC1Dd,OAAO,EAAEC,WAAW;IACpBc,KAAK,EAAEvB;EACX,CAAC,EACDE,gBAAgB,GAAGiB,SAAS,GAAGd,IACnC,CAAC;AACL,CAAC;AAEDR,UAAU,CAAC2B,WAAW,GAAG,YAAY;AAErC,eAAe3B,UAAU","ignoreList":[]}
1
+ {"version":3,"file":"Textstring.js","names":["React","useCallback","useTextstringValue","isTobitEmployee","selectLanguageToChange","Textstring","children","childrenClassName","childrenStyles","childrenTagName","isTextstringHTML","replacements","textstring","text","childrenOnClickFunction","props","onClick","handleClick","event","ctrlKey","then","inGroup","textstringName","name","cloneElement","dangerouslySetInnerHTML","__html","undefined","createElement","className","trim","style","displayName"],"sources":["../../../../src/components/textstring/Textstring.tsx"],"sourcesContent":["import React, {\n CSSProperties,\n FC,\n MouseEvent,\n ReactHTML,\n useCallback,\n type ReactElement,\n} from 'react';\nimport { useTextstringValue } from '../../hooks/useTextstringValue';\nimport { isTobitEmployee } from '../../utils/isTobitEmployee';\nimport { selectLanguageToChange } from '../../utils/textstring';\nimport type { ITextstring, TextstringReplacement } from './types';\n\nexport type TextstringProps = {\n /**\n * The element that the text should be displayed in.\n */\n children?: ReactElement;\n /**\n * The class name of the HTML element that the text should be displayed in. Only used if `children` is not set.\n */\n childrenClassName?: string;\n /**\n * The styles of the HTML element that the text should be displayed in. Only used if `children` is not set.\n */\n childrenStyles?: CSSProperties;\n /**\n * The tag of the HTML element that the text should be displayed in. Only used if `children` is not set.\n */\n childrenTagName?: keyof ReactHTML;\n /**\n * Whether the textstring contains HTML elements and should be displayed as HTML.\n */\n isTextstringHTML?: boolean;\n /**\n * Replacement values for the textstring.\n */\n replacements?: TextstringReplacement;\n /**\n * The text that should be displayed.\n */\n textstring: ITextstring;\n};\n\nconst Textstring: FC<TextstringProps> = ({\n children,\n childrenClassName,\n childrenStyles,\n childrenTagName,\n isTextstringHTML,\n replacements,\n textstring,\n}) => {\n const text = useTextstringValue({ textstring, replacements });\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const childrenOnClickFunction = children?.props.onClick as\n | ((event: MouseEvent<HTMLElement>) => void)\n | undefined;\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLElement>) => {\n if (event.ctrlKey) {\n void isTobitEmployee().then((inGroup: boolean) => {\n if (inGroup) {\n selectLanguageToChange({\n textstringName: textstring.name,\n });\n }\n });\n } else if (typeof childrenOnClickFunction === 'function') {\n childrenOnClickFunction(event);\n }\n },\n [childrenOnClickFunction, textstring.name],\n );\n\n if (children) {\n return React.cloneElement(\n children,\n {\n dangerouslySetInnerHTML: isTextstringHTML ? { __html: text } : undefined,\n onClick: handleClick,\n },\n isTextstringHTML ? undefined : text,\n );\n }\n\n // eslint-disable-next-line react/no-danger-with-children\n return React.createElement(\n childrenTagName || 'span',\n {\n dangerouslySetInnerHTML: isTextstringHTML ? { __html: text } : undefined,\n className: `${childrenClassName || ''} notranslate`.trim(),\n onClick: handleClick,\n style: childrenStyles,\n },\n isTextstringHTML ? undefined : text,\n );\n};\n\nTextstring.displayName = 'Textstring';\n\nexport default Textstring;\n"],"mappings":"AAAA,OAAOA,KAAK,IAKRC,WAAW,QAER,OAAO;AACd,SAASC,kBAAkB,QAAQ,gCAAgC;AACnE,SAASC,eAAe,QAAQ,6BAA6B;AAC7D,SAASC,sBAAsB,QAAQ,wBAAwB;AAkC/D,MAAMC,UAA+B,GAAGA,CAAC;EACrCC,QAAQ;EACRC,iBAAiB;EACjBC,cAAc;EACdC,eAAe;EACfC,gBAAgB;EAChBC,YAAY;EACZC;AACJ,CAAC,KAAK;EACF,MAAMC,IAAI,GAAGX,kBAAkB,CAAC;IAAEU,UAAU;IAAED;EAAa,CAAC,CAAC;;EAE7D;EACA,MAAMG,uBAAuB,GAAGR,QAAQ,EAAES,KAAK,CAACC,OAEjC;EAEf,MAAMC,WAAW,GAAGhB,WAAW,CAC1BiB,KAA8B,IAAK;IAChC,IAAIA,KAAK,CAACC,OAAO,EAAE;MACf,KAAKhB,eAAe,CAAC,CAAC,CAACiB,IAAI,CAAEC,OAAgB,IAAK;QAC9C,IAAIA,OAAO,EAAE;UACTjB,sBAAsB,CAAC;YACnBkB,cAAc,EAAEV,UAAU,CAACW;UAC/B,CAAC,CAAC;QACN;MACJ,CAAC,CAAC;IACN,CAAC,MAAM,IAAI,OAAOT,uBAAuB,KAAK,UAAU,EAAE;MACtDA,uBAAuB,CAACI,KAAK,CAAC;IAClC;EACJ,CAAC,EACD,CAACJ,uBAAuB,EAAEF,UAAU,CAACW,IAAI,CAC7C,CAAC;EAED,IAAIjB,QAAQ,EAAE;IACV,oBAAON,KAAK,CAACwB,YAAY,CACrBlB,QAAQ,EACR;MACImB,uBAAuB,EAAEf,gBAAgB,GAAG;QAAEgB,MAAM,EAAEb;MAAK,CAAC,GAAGc,SAAS;MACxEX,OAAO,EAAEC;IACb,CAAC,EACDP,gBAAgB,GAAGiB,SAAS,GAAGd,IACnC,CAAC;EACL;;EAEA;EACA,oBAAOb,KAAK,CAAC4B,aAAa,CACtBnB,eAAe,IAAI,MAAM,EACzB;IACIgB,uBAAuB,EAAEf,gBAAgB,GAAG;MAAEgB,MAAM,EAAEb;IAAK,CAAC,GAAGc,SAAS;IACxEE,SAAS,EAAE,GAAGtB,iBAAiB,IAAI,EAAE,cAAc,CAACuB,IAAI,CAAC,CAAC;IAC1Dd,OAAO,EAAEC,WAAW;IACpBc,KAAK,EAAEvB;EACX,CAAC,EACDE,gBAAgB,GAAGiB,SAAS,GAAGd,IACnC,CAAC;AACL,CAAC;AAEDR,UAAU,CAAC2B,WAAW,GAAG,YAAY;AAErC,eAAe3B,UAAU","ignoreList":[]}
@@ -1,5 +1,6 @@
1
1
  import React, { createContext, useEffect, useState } from 'react';
2
2
  import { loadLibrary } from '../../utils/textstring';
3
+ import { useLanguage } from 'chayns-api';
3
4
  export const TextstringContext = /*#__PURE__*/createContext({});
4
5
  const TextstringProvider = ({
5
6
  children,
@@ -7,11 +8,14 @@ const TextstringProvider = ({
7
8
  language
8
9
  }) => {
9
10
  const [textstrings, setTextstrings] = useState({});
11
+ const {
12
+ active
13
+ } = useLanguage();
10
14
  useEffect(() => {
11
15
  const loadData = async () => {
12
16
  const textstringResult = await loadLibrary({
13
17
  libraryName,
14
- language
18
+ language: language ?? active
15
19
  });
16
20
  if (textstringResult) {
17
21
  const prevTextstrings = window.Textstrings;
@@ -23,7 +27,7 @@ const TextstringProvider = ({
23
27
  }
24
28
  };
25
29
  void loadData();
26
- }, [language, libraryName]);
30
+ }, [active, language, libraryName]);
27
31
  return /*#__PURE__*/React.createElement(TextstringContext.Provider, {
28
32
  value: textstrings
29
33
  }, children);
@@ -1 +1 @@
1
- {"version":3,"file":"TextstringProvider.js","names":["React","createContext","useEffect","useState","loadLibrary","TextstringContext","TextstringProvider","children","libraryName","language","textstrings","setTextstrings","loadData","textstringResult","prevTextstrings","window","Textstrings","createElement","Provider","value","displayName"],"sources":["../../../../src/components/textstring-provider/TextstringProvider.tsx"],"sourcesContent":["import React, { createContext, FC, ReactNode, useEffect, useState } from 'react';\nimport type { TextstringValue } from '../../types/textstring';\nimport { loadLibrary } from '../../utils/textstring';\n\nexport const TextstringContext = createContext<TextstringValue>({});\n\nexport type TextstringProviderProps = {\n /**\n * The element that should use the library.\n */\n children?: ReactNode;\n /**\n * The language that should be used.\n */\n language: string;\n /**\n * The name of the library.\n */\n libraryName: string;\n};\n\nconst TextstringProvider: FC<TextstringProviderProps> = ({ children, libraryName, language }) => {\n const [textstrings, setTextstrings] = useState<TextstringValue>({});\n\n useEffect(() => {\n const loadData = async () => {\n const textstringResult = await loadLibrary({ libraryName, language });\n\n if (textstringResult) {\n const prevTextstrings = window.Textstrings;\n\n window.Textstrings = {\n ...prevTextstrings,\n [libraryName]: textstringResult,\n };\n\n setTextstrings(textstringResult);\n }\n };\n\n void loadData();\n }, [language, libraryName]);\n\n return <TextstringContext.Provider value={textstrings}>{children}</TextstringContext.Provider>;\n};\n\nTextstringProvider.displayName = 'TextstringProvider';\n\nexport default TextstringProvider;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,aAAa,EAAiBC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAEhF,SAASC,WAAW,QAAQ,wBAAwB;AAEpD,OAAO,MAAMC,iBAAiB,gBAAGJ,aAAa,CAAkB,CAAC,CAAC,CAAC;AAiBnE,MAAMK,kBAA+C,GAAGA,CAAC;EAAEC,QAAQ;EAAEC,WAAW;EAAEC;AAAS,CAAC,KAAK;EAC7F,MAAM,CAACC,WAAW,EAAEC,cAAc,CAAC,GAAGR,QAAQ,CAAkB,CAAC,CAAC,CAAC;EAEnED,SAAS,CAAC,MAAM;IACZ,MAAMU,QAAQ,GAAG,MAAAA,CAAA,KAAY;MACzB,MAAMC,gBAAgB,GAAG,MAAMT,WAAW,CAAC;QAAEI,WAAW;QAAEC;MAAS,CAAC,CAAC;MAErE,IAAII,gBAAgB,EAAE;QAClB,MAAMC,eAAe,GAAGC,MAAM,CAACC,WAAW;QAE1CD,MAAM,CAACC,WAAW,GAAG;UACjB,GAAGF,eAAe;UAClB,CAACN,WAAW,GAAGK;QACnB,CAAC;QAEDF,cAAc,CAACE,gBAAgB,CAAC;MACpC;IACJ,CAAC;IAED,KAAKD,QAAQ,CAAC,CAAC;EACnB,CAAC,EAAE,CAACH,QAAQ,EAAED,WAAW,CAAC,CAAC;EAE3B,oBAAOR,KAAA,CAAAiB,aAAA,CAACZ,iBAAiB,CAACa,QAAQ;IAACC,KAAK,EAAET;EAAY,GAAEH,QAAqC,CAAC;AAClG,CAAC;AAEDD,kBAAkB,CAACc,WAAW,GAAG,oBAAoB;AAErD,eAAed,kBAAkB","ignoreList":[]}
1
+ {"version":3,"file":"TextstringProvider.js","names":["React","createContext","useEffect","useState","loadLibrary","useLanguage","TextstringContext","TextstringProvider","children","libraryName","language","textstrings","setTextstrings","active","loadData","textstringResult","prevTextstrings","window","Textstrings","createElement","Provider","value","displayName"],"sources":["../../../../src/components/textstring-provider/TextstringProvider.tsx"],"sourcesContent":["import React, { createContext, FC, ReactNode, useEffect, useState } from 'react';\nimport type { TextstringValue } from '../../types/textstring';\nimport { loadLibrary } from '../../utils/textstring';\nimport { useLanguage } from 'chayns-api';\n\nexport const TextstringContext = createContext<TextstringValue>({});\n\nexport type TextstringProviderProps = {\n /**\n * The element that should use the library.\n */\n children?: ReactNode;\n /**\n * The language that should be used.\n */\n language?: string;\n /**\n * The name of the library.\n */\n libraryName: string;\n};\n\nconst TextstringProvider: FC<TextstringProviderProps> = ({ children, libraryName, language }) => {\n const [textstrings, setTextstrings] = useState<TextstringValue>({});\n const { active } = useLanguage();\n\n useEffect(() => {\n const loadData = async () => {\n const textstringResult = await loadLibrary({\n libraryName,\n language: language ?? active,\n });\n\n if (textstringResult) {\n const prevTextstrings = window.Textstrings;\n\n window.Textstrings = {\n ...prevTextstrings,\n [libraryName]: textstringResult,\n };\n\n setTextstrings(textstringResult);\n }\n };\n\n void loadData();\n }, [active, language, libraryName]);\n\n return <TextstringContext.Provider value={textstrings}>{children}</TextstringContext.Provider>;\n};\n\nTextstringProvider.displayName = 'TextstringProvider';\n\nexport default TextstringProvider;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,aAAa,EAAiBC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAEhF,SAASC,WAAW,QAAQ,wBAAwB;AACpD,SAASC,WAAW,QAAQ,YAAY;AAExC,OAAO,MAAMC,iBAAiB,gBAAGL,aAAa,CAAkB,CAAC,CAAC,CAAC;AAiBnE,MAAMM,kBAA+C,GAAGA,CAAC;EAAEC,QAAQ;EAAEC,WAAW;EAAEC;AAAS,CAAC,KAAK;EAC7F,MAAM,CAACC,WAAW,EAAEC,cAAc,CAAC,GAAGT,QAAQ,CAAkB,CAAC,CAAC,CAAC;EACnE,MAAM;IAAEU;EAAO,CAAC,GAAGR,WAAW,CAAC,CAAC;EAEhCH,SAAS,CAAC,MAAM;IACZ,MAAMY,QAAQ,GAAG,MAAAA,CAAA,KAAY;MACzB,MAAMC,gBAAgB,GAAG,MAAMX,WAAW,CAAC;QACvCK,WAAW;QACXC,QAAQ,EAAEA,QAAQ,IAAIG;MAC1B,CAAC,CAAC;MAEF,IAAIE,gBAAgB,EAAE;QAClB,MAAMC,eAAe,GAAGC,MAAM,CAACC,WAAW;QAE1CD,MAAM,CAACC,WAAW,GAAG;UACjB,GAAGF,eAAe;UAClB,CAACP,WAAW,GAAGM;QACnB,CAAC;QAEDH,cAAc,CAACG,gBAAgB,CAAC;MACpC;IACJ,CAAC;IAED,KAAKD,QAAQ,CAAC,CAAC;EACnB,CAAC,EAAE,CAACD,MAAM,EAAEH,QAAQ,EAAED,WAAW,CAAC,CAAC;EAEnC,oBAAOT,KAAA,CAAAmB,aAAA,CAACb,iBAAiB,CAACc,QAAQ;IAACC,KAAK,EAAEV;EAAY,GAAEH,QAAqC,CAAC;AAClG,CAAC;AAEDD,kBAAkB,CAACe,WAAW,GAAG,oBAAoB;AAErD,eAAef,kBAAkB","ignoreList":[]}
package/lib/esm/index.js CHANGED
@@ -3,5 +3,5 @@
3
3
  export { default as TextstringProvider } from './components/textstring-provider/TextstringProvider';
4
4
  export { default as Textstring } from './components/textstring/Textstring';
5
5
  export { useTextstringValue } from './hooks/useTextstringValue';
6
- export { getTextstringValue, initTextstrings } from './utils/textstring';
6
+ export { getTextstringValue, initTextstrings, ttsToITextString } from './utils/textstring';
7
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["default","TextstringProvider","Textstring","useTextstringValue","getTextstringValue","initTextstrings"],"sources":["../../src/index.ts"],"sourcesContent":["// noinspection JSUnusedGlobalSymbols\n\nexport { default as TextstringProvider } from './components/textstring-provider/TextstringProvider';\nexport { default as Textstring } from './components/textstring/Textstring';\nexport type { ITextstring, TextstringReplacement } from './components/textstring/types';\nexport { useTextstringValue } from './hooks/useTextstringValue';\nexport { getTextstringValue, initTextstrings } from './utils/textstring';\n"],"mappings":"AAAA;;AAEA,SAASA,OAAO,IAAIC,kBAAkB,QAAQ,qDAAqD;AACnG,SAASD,OAAO,IAAIE,UAAU,QAAQ,oCAAoC;AAE1E,SAASC,kBAAkB,QAAQ,4BAA4B;AAC/D,SAASC,kBAAkB,EAAEC,eAAe,QAAQ,oBAAoB","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["default","TextstringProvider","Textstring","useTextstringValue","getTextstringValue","initTextstrings","ttsToITextString"],"sources":["../../src/index.ts"],"sourcesContent":["// noinspection JSUnusedGlobalSymbols\n\nexport { default as TextstringProvider } from './components/textstring-provider/TextstringProvider';\nexport { default as Textstring } from './components/textstring/Textstring';\nexport type { ITextstring, TextstringReplacement } from './components/textstring/types';\nexport { useTextstringValue } from './hooks/useTextstringValue';\nexport { getTextstringValue, initTextstrings, ttsToITextString } from './utils/textstring';\n"],"mappings":"AAAA;;AAEA,SAASA,OAAO,IAAIC,kBAAkB,QAAQ,qDAAqD;AACnG,SAASD,OAAO,IAAIE,UAAU,QAAQ,oCAAoC;AAE1E,SAASC,kBAAkB,QAAQ,4BAA4B;AAC/D,SAASC,kBAAkB,EAAEC,eAAe,EAAEC,gBAAgB,QAAQ,oBAAoB","ignoreList":[]}
@@ -0,0 +1,21 @@
1
+ import { UacServiceClient } from '@chayns/uac-service';
2
+ import { getAccessToken, getLanguage, getSite, getUser } from 'chayns-api';
3
+ const client = new UacServiceClient({
4
+ getToken: async () => (await getAccessToken()).accessToken || '',
5
+ getDefaultSiteId: () => getSite().id,
6
+ getDefaultPersonId: () => getUser()?.personId || '',
7
+ getLanguage: () => getLanguage().active
8
+ });
9
+ export const isTobitEmployee = async () => {
10
+ const siteInfos = await client.getMembershipSites({
11
+ groupId: 8255
12
+ });
13
+ let isEmployee = false;
14
+ siteInfos.forEach(({
15
+ siteId
16
+ }) => {
17
+ isEmployee = siteId === '60038-22141';
18
+ });
19
+ return isEmployee;
20
+ };
21
+ //# sourceMappingURL=isTobitEmployee.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isTobitEmployee.js","names":["UacServiceClient","getAccessToken","getLanguage","getSite","getUser","client","getToken","accessToken","getDefaultSiteId","id","getDefaultPersonId","personId","active","isTobitEmployee","siteInfos","getMembershipSites","groupId","isEmployee","forEach","siteId"],"sources":["../../../src/utils/isTobitEmployee.ts"],"sourcesContent":["import { UacServiceClient } from '@chayns/uac-service';\nimport { getAccessToken, getLanguage, getSite, getUser } from 'chayns-api';\n\nconst client = new UacServiceClient({\n getToken: async () => (await getAccessToken()).accessToken || '',\n getDefaultSiteId: () => getSite().id,\n getDefaultPersonId: () => getUser()?.personId || '',\n getLanguage: () => getLanguage().active,\n});\n\nexport const isTobitEmployee = async () => {\n const siteInfos = await client.getMembershipSites({ groupId: 8255 });\n\n let isEmployee = false;\n\n siteInfos.forEach(({ siteId }) => {\n isEmployee = siteId === '60038-22141';\n });\n\n return isEmployee;\n};\n"],"mappings":"AAAA,SAASA,gBAAgB,QAAQ,qBAAqB;AACtD,SAASC,cAAc,EAAEC,WAAW,EAAEC,OAAO,EAAEC,OAAO,QAAQ,YAAY;AAE1E,MAAMC,MAAM,GAAG,IAAIL,gBAAgB,CAAC;EAChCM,QAAQ,EAAE,MAAAA,CAAA,KAAY,CAAC,MAAML,cAAc,CAAC,CAAC,EAAEM,WAAW,IAAI,EAAE;EAChEC,gBAAgB,EAAEA,CAAA,KAAML,OAAO,CAAC,CAAC,CAACM,EAAE;EACpCC,kBAAkB,EAAEA,CAAA,KAAMN,OAAO,CAAC,CAAC,EAAEO,QAAQ,IAAI,EAAE;EACnDT,WAAW,EAAEA,CAAA,KAAMA,WAAW,CAAC,CAAC,CAACU;AACrC,CAAC,CAAC;AAEF,OAAO,MAAMC,eAAe,GAAG,MAAAA,CAAA,KAAY;EACvC,MAAMC,SAAS,GAAG,MAAMT,MAAM,CAACU,kBAAkB,CAAC;IAAEC,OAAO,EAAE;EAAK,CAAC,CAAC;EAEpE,IAAIC,UAAU,GAAG,KAAK;EAEtBH,SAAS,CAACI,OAAO,CAAC,CAAC;IAAEC;EAAO,CAAC,KAAK;IAC9BF,UAAU,GAAGE,MAAM,KAAK,aAAa;EACzC,CAAC,CAAC;EAEF,OAAOF,UAAU;AACrB,CAAC","ignoreList":[]}
@@ -1,13 +1,51 @@
1
1
  import { dialog } from 'chayns-api';
2
+ const libraryCache = new Map();
3
+ const loadingLibraries = new Map();
4
+ const getCacheKey = ({
5
+ libraryName,
6
+ language
7
+ }) => `${libraryName}::${language}`;
8
+ const storeTextstrings = (cacheKey, libraryName, value) => {
9
+ libraryCache.set(cacheKey, value);
10
+ if (typeof window !== 'undefined') {
11
+ const prevTextstrings = window.Textstrings;
12
+ window.Textstrings = {
13
+ ...prevTextstrings,
14
+ [libraryName]: value
15
+ };
16
+ }
17
+ };
2
18
  export const loadLibrary = async ({
3
19
  language,
4
20
  libraryName
5
21
  }) => {
6
- const response = await fetch(`https://webapi.tobit.com/TextstringService/v1.0/LangStrings/${libraryName}?language=${language}`);
7
- if (response.status !== 200) {
8
- return null;
22
+ const cacheKey = getCacheKey({
23
+ libraryName,
24
+ language
25
+ });
26
+ const cached = libraryCache.get(cacheKey);
27
+ if (cached) {
28
+ return cached;
29
+ }
30
+ const loading = loadingLibraries.get(cacheKey);
31
+ if (loading) {
32
+ return loading;
33
+ }
34
+ const request = (async () => {
35
+ const response = await fetch(`https://webapi.tobit.com/TextstringService/v1.0/LangStrings/${libraryName}?language=${language}`);
36
+ if (response.status !== 200) {
37
+ return null;
38
+ }
39
+ const value = await response.json();
40
+ storeTextstrings(cacheKey, libraryName, value);
41
+ return value;
42
+ })();
43
+ loadingLibraries.set(cacheKey, request);
44
+ try {
45
+ return await request;
46
+ } finally {
47
+ loadingLibraries.delete(cacheKey);
9
48
  }
10
- return await response.json();
11
49
  };
12
50
  export const selectLanguageToChange = ({
13
51
  textstringName
@@ -34,11 +72,10 @@ export const initTextstrings = ({
34
72
  language
35
73
  }).then(result => {
36
74
  if (result) {
37
- const prevTextstrings = window.Textstrings;
38
- window.Textstrings = {
39
- ...prevTextstrings,
40
- [libraryName]: result
41
- };
75
+ storeTextstrings(getCacheKey({
76
+ libraryName,
77
+ language
78
+ }), libraryName, result);
42
79
  }
43
80
  });
44
81
  };
@@ -60,4 +97,16 @@ export const getTextstringValue = ({
60
97
  }
61
98
  return Object.keys(replacements).reduce((current, key) => current.replace(new RegExp(key, 'g'), replacements[key] || ''), value);
62
99
  };
100
+ export const ttsToITextString = textString => {
101
+ if (typeof textString === 'string') {
102
+ return {
103
+ name: textString,
104
+ fallback: textString
105
+ };
106
+ }
107
+ return {
108
+ name: textString.stringName,
109
+ fallback: textString.fallback
110
+ };
111
+ };
63
112
  //# sourceMappingURL=textstring.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"textstring.js","names":["dialog","loadLibrary","language","libraryName","response","fetch","status","json","selectLanguageToChange","textstringName","iFrame","url","buttons","input","textstring","initTextstrings","then","result","prevTextstrings","window","Textstrings","getTextstringValue","replacements","textstrings","undefined","fallback","Object","keys","reduce","current","key","replace","RegExp","value","name"],"sources":["../../../src/utils/textstring.ts"],"sourcesContent":["import { dialog } from 'chayns-api';\nimport type { ITextstring, TextstringReplacement } from '../components/textstring/types';\nimport type { TextstringValue } from '../types/textstring';\n\ninterface LoadLibraryOptions {\n libraryName: string;\n language: string;\n}\n\nexport const loadLibrary = async ({ language, libraryName }: LoadLibraryOptions) => {\n const response = await fetch(\n `https://webapi.tobit.com/TextstringService/v1.0/LangStrings/${libraryName}?language=${language}`,\n );\n\n if (response.status !== 200) {\n return null;\n }\n\n return (await response.json()) as TextstringValue;\n};\n\ninterface SelectLanguageToChangeOptions {\n textstringName: string;\n}\n\nexport const selectLanguageToChange = ({ textstringName }: SelectLanguageToChangeOptions) => {\n // Note: the page is in v4\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n void dialog.iFrame({\n url: 'https://tapp-staging.chayns-static.space/text-string-tapp/v1/iframe-edit.html',\n buttons: [],\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n input: { textstring: textstringName },\n });\n};\n\ninterface InitTextstringsOptions {\n /**\n * The language that should be used.\n */\n language: string;\n /**\n * The name of the library.\n */\n libraryName: string;\n}\n\nexport const initTextstrings = ({ libraryName, language }: InitTextstringsOptions) => {\n void loadLibrary({ libraryName, language }).then((result) => {\n if (result) {\n const prevTextstrings = window.Textstrings;\n\n window.Textstrings = {\n ...prevTextstrings,\n [libraryName]: result,\n };\n }\n });\n};\n\ninterface GetTextstringValueOptions {\n textstring: ITextstring;\n libraryName: string;\n replacements?: TextstringReplacement;\n}\n\nexport const getTextstringValue = ({\n libraryName,\n textstring,\n replacements,\n}: GetTextstringValueOptions): string => {\n const textstrings =\n typeof window !== 'undefined' ? window.Textstrings?.[libraryName] : undefined;\n\n if (!textstrings) {\n if (!replacements) {\n return textstring.fallback;\n }\n\n return Object.keys(replacements).reduce(\n (current, key) =>\n current.replace(new RegExp(key, 'g'), <string>replacements[key] || ''),\n textstring.fallback,\n );\n }\n\n const value = textstrings[textstring.name] ?? textstring.fallback;\n\n if (!replacements) {\n return value;\n }\n\n return Object.keys(replacements).reduce(\n (current, key) => current.replace(new RegExp(key, 'g'), <string>replacements[key] || ''),\n value,\n );\n};\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,YAAY;AASnC,OAAO,MAAMC,WAAW,GAAG,MAAAA,CAAO;EAAEC,QAAQ;EAAEC;AAAgC,CAAC,KAAK;EAChF,MAAMC,QAAQ,GAAG,MAAMC,KAAK,CACxB,+DAA+DF,WAAW,aAAaD,QAAQ,EACnG,CAAC;EAED,IAAIE,QAAQ,CAACE,MAAM,KAAK,GAAG,EAAE;IACzB,OAAO,IAAI;EACf;EAEA,OAAQ,MAAMF,QAAQ,CAACG,IAAI,CAAC,CAAC;AACjC,CAAC;AAMD,OAAO,MAAMC,sBAAsB,GAAGA,CAAC;EAAEC;AAA8C,CAAC,KAAK;EACzF;EACA;EACA;EACA,KAAKT,MAAM,CAACU,MAAM,CAAC;IACfC,GAAG,EAAE,+EAA+E;IACpFC,OAAO,EAAE,EAAE;IACX;IACA;IACAC,KAAK,EAAE;MAAEC,UAAU,EAAEL;IAAe;EACxC,CAAC,CAAC;AACN,CAAC;AAaD,OAAO,MAAMM,eAAe,GAAGA,CAAC;EAAEZ,WAAW;EAAED;AAAiC,CAAC,KAAK;EAClF,KAAKD,WAAW,CAAC;IAAEE,WAAW;IAAED;EAAS,CAAC,CAAC,CAACc,IAAI,CAAEC,MAAM,IAAK;IACzD,IAAIA,MAAM,EAAE;MACR,MAAMC,eAAe,GAAGC,MAAM,CAACC,WAAW;MAE1CD,MAAM,CAACC,WAAW,GAAG;QACjB,GAAGF,eAAe;QAClB,CAACf,WAAW,GAAGc;MACnB,CAAC;IACL;EACJ,CAAC,CAAC;AACN,CAAC;AAQD,OAAO,MAAMI,kBAAkB,GAAGA,CAAC;EAC/BlB,WAAW;EACXW,UAAU;EACVQ;AACuB,CAAC,KAAa;EACrC,MAAMC,WAAW,GACb,OAAOJ,MAAM,KAAK,WAAW,GAAGA,MAAM,CAACC,WAAW,GAAGjB,WAAW,CAAC,GAAGqB,SAAS;EAEjF,IAAI,CAACD,WAAW,EAAE;IACd,IAAI,CAACD,YAAY,EAAE;MACf,OAAOR,UAAU,CAACW,QAAQ;IAC9B;IAEA,OAAOC,MAAM,CAACC,IAAI,CAACL,YAAY,CAAC,CAACM,MAAM,CACnC,CAACC,OAAO,EAAEC,GAAG,KACTD,OAAO,CAACE,OAAO,CAAC,IAAIC,MAAM,CAACF,GAAG,EAAE,GAAG,CAAC,EAAUR,YAAY,CAACQ,GAAG,CAAC,IAAI,EAAE,CAAC,EAC1EhB,UAAU,CAACW,QACf,CAAC;EACL;EAEA,MAAMQ,KAAK,GAAGV,WAAW,CAACT,UAAU,CAACoB,IAAI,CAAC,IAAIpB,UAAU,CAACW,QAAQ;EAEjE,IAAI,CAACH,YAAY,EAAE;IACf,OAAOW,KAAK;EAChB;EAEA,OAAOP,MAAM,CAACC,IAAI,CAACL,YAAY,CAAC,CAACM,MAAM,CACnC,CAACC,OAAO,EAAEC,GAAG,KAAKD,OAAO,CAACE,OAAO,CAAC,IAAIC,MAAM,CAACF,GAAG,EAAE,GAAG,CAAC,EAAUR,YAAY,CAACQ,GAAG,CAAC,IAAI,EAAE,CAAC,EACxFG,KACJ,CAAC;AACL,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"textstring.js","names":["dialog","libraryCache","Map","loadingLibraries","getCacheKey","libraryName","language","storeTextstrings","cacheKey","value","set","window","prevTextstrings","Textstrings","loadLibrary","cached","get","loading","request","response","fetch","status","json","delete","selectLanguageToChange","textstringName","iFrame","url","buttons","input","textstring","initTextstrings","then","result","getTextstringValue","replacements","textstrings","undefined","fallback","Object","keys","reduce","current","key","replace","RegExp","name","ttsToITextString","textString","stringName"],"sources":["../../../src/utils/textstring.ts"],"sourcesContent":["import { dialog } from 'chayns-api';\nimport type { ITextstring, TextstringReplacement } from '../components/textstring/types';\nimport type { TextstringValue } from '../types/textstring';\n\nconst libraryCache = new Map<string, TextstringValue>();\nconst loadingLibraries = new Map<string, Promise<TextstringValue | null>>();\n\ninterface LoadLibraryOptions {\n libraryName: string;\n language: string;\n}\n\nconst getCacheKey = ({ libraryName, language }: LoadLibraryOptions) =>\n `${libraryName}::${language}`;\n\nconst storeTextstrings = (cacheKey: string, libraryName: string, value: TextstringValue) => {\n libraryCache.set(cacheKey, value);\n\n if (typeof window !== 'undefined') {\n const prevTextstrings = window.Textstrings;\n\n window.Textstrings = {\n ...prevTextstrings,\n [libraryName]: value,\n };\n }\n};\n\nexport const loadLibrary = async ({ language, libraryName }: LoadLibraryOptions) => {\n const cacheKey = getCacheKey({ libraryName, language });\n const cached = libraryCache.get(cacheKey);\n\n if (cached) {\n return cached;\n }\n\n const loading = loadingLibraries.get(cacheKey);\n\n if (loading) {\n return loading;\n }\n\n const request = (async () => {\n const response = await fetch(\n `https://webapi.tobit.com/TextstringService/v1.0/LangStrings/${libraryName}?language=${language}`,\n );\n\n if (response.status !== 200) {\n return null;\n }\n\n const value = (await response.json()) as TextstringValue;\n\n storeTextstrings(cacheKey, libraryName, value);\n\n return value;\n })();\n\n loadingLibraries.set(cacheKey, request);\n\n try {\n return await request;\n } finally {\n loadingLibraries.delete(cacheKey);\n }\n};\n\ninterface SelectLanguageToChangeOptions {\n textstringName: string;\n}\n\nexport const selectLanguageToChange = ({ textstringName }: SelectLanguageToChangeOptions) => {\n // Note: the page is in v4\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n void dialog.iFrame({\n url: 'https://tapp-staging.chayns-static.space/text-string-tapp/v1/iframe-edit.html',\n buttons: [],\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n input: { textstring: textstringName },\n });\n};\n\ninterface InitTextstringsOptions {\n /**\n * The language that should be used.\n */\n language: string;\n /**\n * The name of the library.\n */\n libraryName: string;\n}\n\nexport const initTextstrings = ({ libraryName, language }: InitTextstringsOptions) => {\n void loadLibrary({ libraryName, language }).then((result) => {\n if (result) {\n storeTextstrings(getCacheKey({ libraryName, language }), libraryName, result);\n }\n });\n};\n\ninterface GetTextstringValueOptions {\n textstring: ITextstring;\n libraryName: string;\n replacements?: TextstringReplacement;\n}\n\nexport const getTextstringValue = ({\n libraryName,\n textstring,\n replacements,\n}: GetTextstringValueOptions): string => {\n const textstrings =\n typeof window !== 'undefined' ? window.Textstrings?.[libraryName] : undefined;\n\n if (!textstrings) {\n if (!replacements) {\n return textstring.fallback;\n }\n\n return Object.keys(replacements).reduce(\n (current, key) =>\n current.replace(new RegExp(key, 'g'), <string>replacements[key] || ''),\n textstring.fallback,\n );\n }\n\n const value = textstrings[textstring.name] ?? textstring.fallback;\n\n if (!replacements) {\n return value;\n }\n\n return Object.keys(replacements).reduce(\n (current, key) => current.replace(new RegExp(key, 'g'), <string>replacements[key] || ''),\n value,\n );\n};\n\ninterface TtsToITextStringOptions {\n stringName: string;\n fallback: string;\n}\nexport const ttsToITextString = (\n textString: TtsToITextStringOptions | string,\n): { name: string; fallback: string } => {\n if (typeof textString === 'string') {\n return { name: textString, fallback: textString };\n }\n return {\n name: textString.stringName,\n fallback: textString.fallback,\n };\n};\n"],"mappings":"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","ignoreList":[]}
@@ -9,7 +9,7 @@ export type TextstringProviderProps = {
9
9
  /**
10
10
  * The language that should be used.
11
11
  */
12
- language: string;
12
+ language?: string;
13
13
  /**
14
14
  * The name of the library.
15
15
  */
@@ -2,4 +2,4 @@ export { default as TextstringProvider } from './components/textstring-provider/
2
2
  export { default as Textstring } from './components/textstring/Textstring';
3
3
  export type { ITextstring, TextstringReplacement } from './components/textstring/types';
4
4
  export { useTextstringValue } from './hooks/useTextstringValue';
5
- export { getTextstringValue, initTextstrings } from './utils/textstring';
5
+ export { getTextstringValue, initTextstrings, ttsToITextString } from './utils/textstring';
@@ -0,0 +1 @@
1
+ export declare const isTobitEmployee: () => Promise<boolean>;
@@ -26,4 +26,12 @@ interface GetTextstringValueOptions {
26
26
  replacements?: TextstringReplacement;
27
27
  }
28
28
  export declare const getTextstringValue: ({ libraryName, textstring, replacements, }: GetTextstringValueOptions) => string;
29
+ interface TtsToITextStringOptions {
30
+ stringName: string;
31
+ fallback: string;
32
+ }
33
+ export declare const ttsToITextString: (textString: TtsToITextStringOptions | string) => {
34
+ name: string;
35
+ fallback: string;
36
+ };
29
37
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chayns-components/textstring",
3
- "version": "5.0.60",
3
+ "version": "5.0.61",
4
4
  "description": "A set of beautiful React components for developing your own applications with chayns.",
5
5
  "sideEffects": false,
6
6
  "browserslist": [
@@ -70,7 +70,7 @@
70
70
  "typescript": "^5.9.3"
71
71
  },
72
72
  "dependencies": {
73
- "@chayns-components/core": "^5.0.60",
73
+ "@chayns/uac-service": "^0.0.62",
74
74
  "react-compiler-runtime": "^1.0.0"
75
75
  },
76
76
  "peerDependencies": {
@@ -83,5 +83,5 @@
83
83
  "publishConfig": {
84
84
  "access": "public"
85
85
  },
86
- "gitHead": "59d6c06fb3ef567df4682771183aa81ed5e6d8f8"
86
+ "gitHead": "1c31468fbb8681539a13524f059d7109189b990d"
87
87
  }