@coorpacademy/components 11.40.3 → 11.40.4-alpha.44
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/es/molecule/icon-picker-modal/index.d.ts.map +1 -1
- package/es/molecule/icon-picker-modal/index.js +39 -15
- package/es/molecule/icon-picker-modal/index.js.map +1 -1
- package/lib/molecule/icon-picker-modal/index.d.ts.map +1 -1
- package/lib/molecule/icon-picker-modal/index.js +38 -14
- package/lib/molecule/icon-picker-modal/index.js.map +1 -1
- package/locales/bs/global.json +5 -5
- package/locales/cs/global.json +4 -4
- package/locales/de/global.json +4 -4
- package/locales/es/global.json +4 -4
- package/locales/et/global.json +4 -4
- package/locales/fi/global.json +4 -4
- package/locales/fr/global.json +3 -3
- package/locales/hr/global.json +4 -4
- package/locales/hu/global.json +5 -5
- package/locales/hy/global.json +6 -6
- package/locales/it/global.json +4 -4
- package/locales/ja/global.json +6 -6
- package/locales/ko/global.json +6 -6
- package/locales/nl/global.json +4 -4
- package/locales/pl/global.json +5 -5
- package/locales/pt/global.json +5 -5
- package/locales/ro/global.json +4 -4
- package/locales/ru/global.json +6 -6
- package/locales/sk/global.json +4 -4
- package/locales/sl/global.json +6 -6
- package/locales/sv/global.json +4 -4
- package/locales/tl/global.json +4 -4
- package/locales/tr/global.json +4 -4
- package/locales/uk/global.json +6 -6
- package/locales/vi/global.json +5 -5
- package/locales/zh/global.json +6 -6
- package/locales/zh_TW/global.json +5 -5
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/molecule/icon-picker-modal/index.js"],"names":[],"mappings":";AAcA,+
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/molecule/icon-picker-modal/index.js"],"names":[],"mappings":";AAcA,+EAoKC"}
|
|
@@ -6,7 +6,7 @@ import _get from "lodash/fp/get";
|
|
|
6
6
|
import _pipe from "lodash/fp/pipe";
|
|
7
7
|
import _map from "lodash/fp/map";
|
|
8
8
|
import _entries from "lodash/fp/entries";
|
|
9
|
-
import React, { useMemo, useState, useCallback, useEffect } from 'react';
|
|
9
|
+
import React, { useMemo, useState, useCallback, useEffect, useRef } from 'react';
|
|
10
10
|
import PropTypes from 'prop-types';
|
|
11
11
|
import { fas } from '@fortawesome/pro-solid-svg-icons';
|
|
12
12
|
import BaseModal from '../base-modal';
|
|
@@ -30,6 +30,10 @@ const IconPickerModal = (props, context) => {
|
|
|
30
30
|
const [selectedIcon, setSelectedIcon] = useState(null);
|
|
31
31
|
const [displayedIcons, setDisplayedIcons] = useState([]);
|
|
32
32
|
const [currentIndex, setCurrentIndex] = useState(0);
|
|
33
|
+
|
|
34
|
+
// Référence pour maintenir la position de scroll
|
|
35
|
+
const scrollContainerRef = useRef(null);
|
|
36
|
+
const lastScrollPosition = useRef(0);
|
|
33
37
|
const allIcons = useMemo(() => _pipe(_values, _map(_get('iconName')), _uniq)(fas), []);
|
|
34
38
|
const {
|
|
35
39
|
searchValue,
|
|
@@ -43,9 +47,6 @@ const IconPickerModal = (props, context) => {
|
|
|
43
47
|
const handleClose = useCallback(() => {
|
|
44
48
|
onClose();
|
|
45
49
|
}, [onClose]);
|
|
46
|
-
const handleIconClick = useCallback(iconName => () => {
|
|
47
|
-
setSelectedIcon(prevSelectedIcon => prevSelectedIcon === iconName ? null : iconName);
|
|
48
|
-
}, []);
|
|
49
50
|
const loadMoreIcons = useCallback(() => {
|
|
50
51
|
const nextIndex = currentIndex + ICONS_PER_LOAD;
|
|
51
52
|
const newIcons = _slice(currentIndex, nextIndex, searchResults);
|
|
@@ -62,21 +63,43 @@ const IconPickerModal = (props, context) => {
|
|
|
62
63
|
clientHeight,
|
|
63
64
|
scrollHeight
|
|
64
65
|
} = event.currentTarget;
|
|
66
|
+
// Sauvegarder la position de scroll
|
|
67
|
+
lastScrollPosition.current = scrollTop;
|
|
65
68
|
if (scrollHeight - scrollTop <= clientHeight + 1) {
|
|
66
69
|
loadMoreIcons();
|
|
67
70
|
}
|
|
68
71
|
}, [loadMoreIcons]);
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
faIcon: iconName,
|
|
75
|
-
onClick: handleIconClick(iconName),
|
|
76
|
-
options: {
|
|
77
|
-
isSelected: selectedIcon === iconName
|
|
72
|
+
|
|
73
|
+
// Effet pour restaurer la position de scroll après un re-render
|
|
74
|
+
useEffect(() => {
|
|
75
|
+
if (scrollContainerRef.current && lastScrollPosition.current > 0) {
|
|
76
|
+
scrollContainerRef.current.scrollTop = lastScrollPosition.current;
|
|
78
77
|
}
|
|
79
|
-
}
|
|
78
|
+
}, [selectedIcon]);
|
|
79
|
+
const handleIconClick = useCallback(iconName => {
|
|
80
|
+
// Option 1: Sélection immédiate (recommandée pour Redux)
|
|
81
|
+
// onConfirm(iconName);
|
|
82
|
+
// onClose();
|
|
83
|
+
|
|
84
|
+
// Option 2: Si vous voulez garder la sélection
|
|
85
|
+
setSelectedIcon(prevSelectedIcon => prevSelectedIcon === iconName ? null : iconName);
|
|
86
|
+
}, [setSelectedIcon]);
|
|
87
|
+
|
|
88
|
+
// Créer une fonction de clic pour chaque icône
|
|
89
|
+
const createIconClickHandler = useCallback(iconName => () => handleIconClick(iconName), [handleIconClick]);
|
|
90
|
+
const icons = useMemo(() => _pipe(_entries, _map(([index, iconName]) => {
|
|
91
|
+
return /*#__PURE__*/React.createElement(SelectIcon, {
|
|
92
|
+
key: `icon-${iconName}`,
|
|
93
|
+
size: "responsive",
|
|
94
|
+
"data-name": `icon-${iconName}`,
|
|
95
|
+
"aria-label": iconName,
|
|
96
|
+
faIcon: iconName,
|
|
97
|
+
onClick: createIconClickHandler(iconName),
|
|
98
|
+
options: {
|
|
99
|
+
isSelected: selectedIcon === iconName
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
}))(displayedIcons), [displayedIcons, selectedIcon, createIconClickHandler]);
|
|
80
103
|
const footer = useMemo(() => {
|
|
81
104
|
return {
|
|
82
105
|
cancelButton: {
|
|
@@ -107,7 +130,8 @@ const IconPickerModal = (props, context) => {
|
|
|
107
130
|
headerIcon: {
|
|
108
131
|
name: 'arrows-rotate',
|
|
109
132
|
backgroundColor: '#D6E6FF'
|
|
110
|
-
}
|
|
133
|
+
},
|
|
134
|
+
scrollContainerRef: scrollContainerRef
|
|
111
135
|
}, /*#__PURE__*/React.createElement("div", {
|
|
112
136
|
className: style.iconPicker
|
|
113
137
|
}, /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["React","useMemo","useState","useCallback","useEffect","PropTypes","fas","BaseModal","SelectIcon","Provider","SearchForm","COLORS","style","useIconSearch","ICONS_PER_LOAD","IconPickerModal","props","context","isOpen","onCancel","onConfirm","onClose","translate","selectedIcon","setSelectedIcon","displayedIcons","setDisplayedIcons","currentIndex","setCurrentIndex","allIcons","_pipe","_values","_map","_get","_uniq","searchValue","searchResults","handleSearch","handleReset","handleCancel","handleClose","handleIconClick","iconName","prevSelectedIcon","loadMoreIcons","nextIndex","newIcons","_slice","prevIcons","handleScroll","event","scrollTop","clientHeight","scrollHeight","currentTarget","icons","_entries","index","createElement","key","size","faIcon","onClick","options","isSelected","footer","cancelButton","label","confirmButton","disabled","color","cm_primary_blue","title","description","onScroll","headerIcon","name","backgroundColor","className","iconPicker","Fragment","searchWrapper","search","placeholder","value","onChange","onReset","dataTestId","_size","emptySearchResultContainer","emptySearchResultTitle","emptySearchResultDescription","emptySearchResultClearSearch","iconsListWrapper","contextTypes","childContextTypes","propTypes","process","env","NODE_ENV","bool","func"],"sources":["../../../src/molecule/icon-picker-modal/index.js"],"sourcesContent":["import React, {useMemo, useState, useCallback, useEffect} from 'react';\nimport PropTypes from 'prop-types';\nimport {fas} from '@fortawesome/pro-solid-svg-icons';\nimport {entries, map, pipe, get, values, slice, size, uniq} from 'lodash/fp';\nimport BaseModal from '../base-modal';\nimport SelectIcon from '../../atom/select-icon';\nimport Provider from '../../atom/provider';\nimport SearchForm from '../search-form';\nimport {COLORS} from '../../variables/colors';\nimport style from './style.css';\nimport useIconSearch from './use-icon-search';\n\nconst ICONS_PER_LOAD = 48;\n\nconst IconPickerModal = (props, context) => {\n const {isOpen, onCancel, onConfirm, onClose} = props;\n const {translate} = context;\n\n const [selectedIcon, setSelectedIcon] = useState(null);\n const [displayedIcons, setDisplayedIcons] = useState([]);\n const [currentIndex, setCurrentIndex] = useState(0);\n\n const allIcons = useMemo(() => pipe(values, map(get('iconName')), uniq)(fas), []);\n const {searchValue, searchResults, handleSearch, handleReset} = useIconSearch(allIcons);\n\n const handleCancel = useCallback(() => {\n onCancel();\n }, [onCancel]);\n\n const handleClose = useCallback(() => {\n onClose();\n }, [onClose]);\n\n const handleIconClick = useCallback(\n iconName => () => {\n setSelectedIcon(prevSelectedIcon => (prevSelectedIcon === iconName ? null : iconName));\n },\n []\n );\n\n const loadMoreIcons = useCallback(() => {\n const nextIndex = currentIndex + ICONS_PER_LOAD;\n const newIcons = slice(currentIndex, nextIndex, searchResults);\n setDisplayedIcons(prevIcons => [...prevIcons, ...newIcons]);\n setCurrentIndex(nextIndex);\n }, [currentIndex, searchResults]);\n\n useEffect(() => {\n setDisplayedIcons(() => slice(0, ICONS_PER_LOAD, searchResults));\n setCurrentIndex(ICONS_PER_LOAD);\n }, [searchResults]);\n\n const handleScroll = useCallback(\n event => {\n const {scrollTop, clientHeight, scrollHeight} = event.currentTarget;\n if (scrollHeight - scrollTop <= clientHeight + 1) {\n loadMoreIcons();\n }\n },\n [loadMoreIcons]\n );\n\n const icons = useMemo(\n () =>\n pipe(\n entries,\n map(([index, iconName]) => (\n <SelectIcon\n key={`icon-${index}`}\n size=\"responsive\"\n data-name={`icon-${index}`}\n aria-label={iconName}\n faIcon={iconName}\n onClick={handleIconClick(iconName)}\n options={{isSelected: selectedIcon === iconName}}\n />\n ))\n )(displayedIcons),\n [displayedIcons, selectedIcon, handleIconClick]\n );\n\n const footer = useMemo(() => {\n return {\n cancelButton: {\n onCancel: handleCancel,\n label: translate('cancel')\n },\n confirmButton: {\n onConfirm: () => {\n onConfirm(selectedIcon);\n setSelectedIcon(null);\n onClose();\n },\n label: translate('confirm'),\n iconName: 'plus',\n disabled: selectedIcon === null,\n color: COLORS.cm_primary_blue\n }\n };\n }, [handleCancel, onConfirm, onClose, translate, selectedIcon]);\n\n if (!isOpen) return null;\n\n return (\n <BaseModal\n title={translate('icon_picker_title')}\n description={translate('icon_picker_description')}\n isOpen={isOpen}\n onClose={handleClose}\n onScroll={handleScroll}\n footer={footer}\n headerIcon={{\n name: 'arrows-rotate',\n backgroundColor: '#D6E6FF'\n }}\n >\n <div className={style.iconPicker}>\n {\n <>\n <div className={style.searchWrapper}>\n <SearchForm\n search={{\n placeholder: translate('search_place_holder'),\n value: searchValue,\n onChange: handleSearch\n }}\n onReset={handleReset}\n dataTestId=\"search-input\"\n />\n </div>\n {searchValue && size(searchResults) === 0 ? (\n <div className={style.emptySearchResultContainer}>\n <div className={style.emptySearchResultTitle}>\n {translate('empty_search_result_title', {searchValue})}\n </div>\n <div className={style.emptySearchResultDescription}>\n {translate('empty_search_result_description')}\n </div>\n <div className={style.emptySearchResultClearSearch} onClick={handleReset}>\n {translate('empty_search_result_clear_search')}\n </div>\n </div>\n ) : (\n <div className={style.iconsListWrapper}>{icons}</div>\n )}\n </>\n }\n </div>\n </BaseModal>\n );\n};\n\nIconPickerModal.contextTypes = {\n translate: Provider.childContextTypes.translate\n};\n\nIconPickerModal.propTypes = {\n isOpen: PropTypes.bool,\n onCancel: PropTypes.func,\n onConfirm: PropTypes.func,\n onClose: PropTypes.func\n};\n\nexport default IconPickerModal;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["React","useMemo","useState","useCallback","useEffect","useRef","PropTypes","fas","BaseModal","SelectIcon","Provider","SearchForm","COLORS","style","useIconSearch","ICONS_PER_LOAD","IconPickerModal","props","context","isOpen","onCancel","onConfirm","onClose","translate","selectedIcon","setSelectedIcon","displayedIcons","setDisplayedIcons","currentIndex","setCurrentIndex","scrollContainerRef","lastScrollPosition","allIcons","_pipe","_values","_map","_get","_uniq","searchValue","searchResults","handleSearch","handleReset","handleCancel","handleClose","loadMoreIcons","nextIndex","newIcons","_slice","prevIcons","handleScroll","event","scrollTop","clientHeight","scrollHeight","currentTarget","current","handleIconClick","iconName","prevSelectedIcon","createIconClickHandler","icons","_entries","index","createElement","key","size","faIcon","onClick","options","isSelected","footer","cancelButton","label","confirmButton","disabled","color","cm_primary_blue","title","description","onScroll","headerIcon","name","backgroundColor","className","iconPicker","Fragment","searchWrapper","search","placeholder","value","onChange","onReset","dataTestId","_size","emptySearchResultContainer","emptySearchResultTitle","emptySearchResultDescription","emptySearchResultClearSearch","iconsListWrapper","contextTypes","childContextTypes","propTypes","process","env","NODE_ENV","bool","func"],"sources":["../../../src/molecule/icon-picker-modal/index.js"],"sourcesContent":["import React, {useMemo, useState, useCallback, useEffect, useRef} from 'react';\nimport PropTypes from 'prop-types';\nimport {fas} from '@fortawesome/pro-solid-svg-icons';\nimport {entries, map, pipe, get, values, slice, size, uniq} from 'lodash/fp';\nimport BaseModal from '../base-modal';\nimport SelectIcon from '../../atom/select-icon';\nimport Provider from '../../atom/provider';\nimport SearchForm from '../search-form';\nimport {COLORS} from '../../variables/colors';\nimport style from './style.css';\nimport useIconSearch from './use-icon-search';\n\nconst ICONS_PER_LOAD = 48;\n\nconst IconPickerModal = (props, context) => {\n const {isOpen, onCancel, onConfirm, onClose} = props;\n const {translate} = context;\n\n const [selectedIcon, setSelectedIcon] = useState(null);\n const [displayedIcons, setDisplayedIcons] = useState([]);\n const [currentIndex, setCurrentIndex] = useState(0);\n\n // Référence pour maintenir la position de scroll\n const scrollContainerRef = useRef(null);\n const lastScrollPosition = useRef(0);\n\n const allIcons = useMemo(() => pipe(values, map(get('iconName')), uniq)(fas), []);\n const {searchValue, searchResults, handleSearch, handleReset} = useIconSearch(allIcons);\n\n const handleCancel = useCallback(() => {\n onCancel();\n }, [onCancel]);\n\n const handleClose = useCallback(() => {\n onClose();\n }, [onClose]);\n\n const loadMoreIcons = useCallback(() => {\n const nextIndex = currentIndex + ICONS_PER_LOAD;\n const newIcons = slice(currentIndex, nextIndex, searchResults);\n setDisplayedIcons(prevIcons => [...prevIcons, ...newIcons]);\n setCurrentIndex(nextIndex);\n }, [currentIndex, searchResults]);\n\n useEffect(() => {\n setDisplayedIcons(() => slice(0, ICONS_PER_LOAD, searchResults));\n setCurrentIndex(ICONS_PER_LOAD);\n }, [searchResults]);\n\n const handleScroll = useCallback(\n event => {\n const {scrollTop, clientHeight, scrollHeight} = event.currentTarget;\n // Sauvegarder la position de scroll\n lastScrollPosition.current = scrollTop;\n\n if (scrollHeight - scrollTop <= clientHeight + 1) {\n loadMoreIcons();\n }\n },\n [loadMoreIcons]\n );\n\n // Effet pour restaurer la position de scroll après un re-render\n useEffect(() => {\n if (scrollContainerRef.current && lastScrollPosition.current > 0) {\n scrollContainerRef.current.scrollTop = lastScrollPosition.current;\n }\n }, [selectedIcon]);\n\n const handleIconClick = useCallback(\n iconName => {\n // Option 1: Sélection immédiate (recommandée pour Redux)\n // onConfirm(iconName);\n // onClose();\n\n // Option 2: Si vous voulez garder la sélection\n setSelectedIcon(prevSelectedIcon => (prevSelectedIcon === iconName ? null : iconName));\n },\n [setSelectedIcon]\n );\n\n // Créer une fonction de clic pour chaque icône\n const createIconClickHandler = useCallback(\n iconName => () => handleIconClick(iconName),\n [handleIconClick]\n );\n\n const icons = useMemo(\n () =>\n pipe(\n entries,\n map(([index, iconName]) => {\n return (\n <SelectIcon\n key={`icon-${iconName}`}\n size=\"responsive\"\n data-name={`icon-${iconName}`}\n aria-label={iconName}\n faIcon={iconName}\n onClick={createIconClickHandler(iconName)}\n options={{isSelected: selectedIcon === iconName}}\n />\n );\n })\n )(displayedIcons),\n [displayedIcons, selectedIcon, createIconClickHandler]\n );\n\n const footer = useMemo(() => {\n return {\n cancelButton: {\n onCancel: handleCancel,\n label: translate('cancel')\n },\n confirmButton: {\n onConfirm: () => {\n onConfirm(selectedIcon);\n setSelectedIcon(null);\n onClose();\n },\n label: translate('confirm'),\n iconName: 'plus',\n disabled: selectedIcon === null,\n color: COLORS.cm_primary_blue\n }\n };\n }, [handleCancel, onConfirm, onClose, translate, selectedIcon]);\n\n if (!isOpen) return null;\n\n return (\n <BaseModal\n title={translate('icon_picker_title')}\n description={translate('icon_picker_description')}\n isOpen={isOpen}\n onClose={handleClose}\n onScroll={handleScroll}\n footer={footer}\n headerIcon={{\n name: 'arrows-rotate',\n backgroundColor: '#D6E6FF'\n }}\n scrollContainerRef={scrollContainerRef}\n >\n <div className={style.iconPicker}>\n {\n <>\n <div className={style.searchWrapper}>\n <SearchForm\n search={{\n placeholder: translate('search_place_holder'),\n value: searchValue,\n onChange: handleSearch\n }}\n onReset={handleReset}\n dataTestId=\"search-input\"\n />\n </div>\n {searchValue && size(searchResults) === 0 ? (\n <div className={style.emptySearchResultContainer}>\n <div className={style.emptySearchResultTitle}>\n {translate('empty_search_result_title', {searchValue})}\n </div>\n <div className={style.emptySearchResultDescription}>\n {translate('empty_search_result_description')}\n </div>\n <div className={style.emptySearchResultClearSearch} onClick={handleReset}>\n {translate('empty_search_result_clear_search')}\n </div>\n </div>\n ) : (\n <div className={style.iconsListWrapper}>{icons}</div>\n )}\n </>\n }\n </div>\n </BaseModal>\n );\n};\n\nIconPickerModal.contextTypes = {\n translate: Provider.childContextTypes.translate\n};\n\nIconPickerModal.propTypes = {\n isOpen: PropTypes.bool,\n onCancel: PropTypes.func,\n onConfirm: PropTypes.func,\n onClose: PropTypes.func\n};\n\nexport default IconPickerModal;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/molecule/icon-picker-modal/index.js"],"names":[],"mappings":";AAcA,+
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/molecule/icon-picker-modal/index.js"],"names":[],"mappings":";AAcA,+EAoKC"}
|
|
@@ -37,6 +37,10 @@ const IconPickerModal = (props, context) => {
|
|
|
37
37
|
const [selectedIcon, setSelectedIcon] = (0, _react.useState)(null);
|
|
38
38
|
const [displayedIcons, setDisplayedIcons] = (0, _react.useState)([]);
|
|
39
39
|
const [currentIndex, setCurrentIndex] = (0, _react.useState)(0);
|
|
40
|
+
|
|
41
|
+
// Référence pour maintenir la position de scroll
|
|
42
|
+
const scrollContainerRef = (0, _react.useRef)(null);
|
|
43
|
+
const lastScrollPosition = (0, _react.useRef)(0);
|
|
40
44
|
const allIcons = (0, _react.useMemo)(() => (0, _pipe2.default)(_values2.default, (0, _map2.default)((0, _get2.default)('iconName')), _uniq2.default)(_proSolidSvgIcons.fas), []);
|
|
41
45
|
const {
|
|
42
46
|
searchValue,
|
|
@@ -50,9 +54,6 @@ const IconPickerModal = (props, context) => {
|
|
|
50
54
|
const handleClose = (0, _react.useCallback)(() => {
|
|
51
55
|
onClose();
|
|
52
56
|
}, [onClose]);
|
|
53
|
-
const handleIconClick = (0, _react.useCallback)(iconName => () => {
|
|
54
|
-
setSelectedIcon(prevSelectedIcon => prevSelectedIcon === iconName ? null : iconName);
|
|
55
|
-
}, []);
|
|
56
57
|
const loadMoreIcons = (0, _react.useCallback)(() => {
|
|
57
58
|
const nextIndex = currentIndex + ICONS_PER_LOAD;
|
|
58
59
|
const newIcons = (0, _slice2.default)(currentIndex, nextIndex, searchResults);
|
|
@@ -69,21 +70,43 @@ const IconPickerModal = (props, context) => {
|
|
|
69
70
|
clientHeight,
|
|
70
71
|
scrollHeight
|
|
71
72
|
} = event.currentTarget;
|
|
73
|
+
// Sauvegarder la position de scroll
|
|
74
|
+
lastScrollPosition.current = scrollTop;
|
|
72
75
|
if (scrollHeight - scrollTop <= clientHeight + 1) {
|
|
73
76
|
loadMoreIcons();
|
|
74
77
|
}
|
|
75
78
|
}, [loadMoreIcons]);
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
faIcon: iconName,
|
|
82
|
-
onClick: handleIconClick(iconName),
|
|
83
|
-
options: {
|
|
84
|
-
isSelected: selectedIcon === iconName
|
|
79
|
+
|
|
80
|
+
// Effet pour restaurer la position de scroll après un re-render
|
|
81
|
+
(0, _react.useEffect)(() => {
|
|
82
|
+
if (scrollContainerRef.current && lastScrollPosition.current > 0) {
|
|
83
|
+
scrollContainerRef.current.scrollTop = lastScrollPosition.current;
|
|
85
84
|
}
|
|
86
|
-
}
|
|
85
|
+
}, [selectedIcon]);
|
|
86
|
+
const handleIconClick = (0, _react.useCallback)(iconName => {
|
|
87
|
+
// Option 1: Sélection immédiate (recommandée pour Redux)
|
|
88
|
+
// onConfirm(iconName);
|
|
89
|
+
// onClose();
|
|
90
|
+
|
|
91
|
+
// Option 2: Si vous voulez garder la sélection
|
|
92
|
+
setSelectedIcon(prevSelectedIcon => prevSelectedIcon === iconName ? null : iconName);
|
|
93
|
+
}, [setSelectedIcon]);
|
|
94
|
+
|
|
95
|
+
// Créer une fonction de clic pour chaque icône
|
|
96
|
+
const createIconClickHandler = (0, _react.useCallback)(iconName => () => handleIconClick(iconName), [handleIconClick]);
|
|
97
|
+
const icons = (0, _react.useMemo)(() => (0, _pipe2.default)(_entries2.default, (0, _map2.default)(([index, iconName]) => {
|
|
98
|
+
return /*#__PURE__*/_react.default.createElement(_selectIcon.default, {
|
|
99
|
+
key: `icon-${iconName}`,
|
|
100
|
+
size: "responsive",
|
|
101
|
+
"data-name": `icon-${iconName}`,
|
|
102
|
+
"aria-label": iconName,
|
|
103
|
+
faIcon: iconName,
|
|
104
|
+
onClick: createIconClickHandler(iconName),
|
|
105
|
+
options: {
|
|
106
|
+
isSelected: selectedIcon === iconName
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
}))(displayedIcons), [displayedIcons, selectedIcon, createIconClickHandler]);
|
|
87
110
|
const footer = (0, _react.useMemo)(() => {
|
|
88
111
|
return {
|
|
89
112
|
cancelButton: {
|
|
@@ -114,7 +137,8 @@ const IconPickerModal = (props, context) => {
|
|
|
114
137
|
headerIcon: {
|
|
115
138
|
name: 'arrows-rotate',
|
|
116
139
|
backgroundColor: '#D6E6FF'
|
|
117
|
-
}
|
|
140
|
+
},
|
|
141
|
+
scrollContainerRef: scrollContainerRef
|
|
118
142
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
119
143
|
className: _style.default.iconPicker
|
|
120
144
|
}, /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_proSolidSvgIcons","_baseModal","_selectIcon","_provider","_searchForm","_colors","_style","_useIconSearch","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","ICONS_PER_LOAD","IconPickerModal","props","context","isOpen","onCancel","onConfirm","onClose","translate","selectedIcon","setSelectedIcon","useState","displayedIcons","setDisplayedIcons","currentIndex","setCurrentIndex","allIcons","useMemo","_pipe2","_values2","_map2","_get2","_uniq2","fas","searchValue","searchResults","handleSearch","handleReset","useIconSearch","handleCancel","useCallback","handleClose","handleIconClick","iconName","prevSelectedIcon","loadMoreIcons","nextIndex","newIcons","_slice2","prevIcons","useEffect","handleScroll","event","scrollTop","clientHeight","scrollHeight","currentTarget","icons","_entries2","index","createElement","key","size","faIcon","onClick","options","isSelected","footer","cancelButton","label","confirmButton","disabled","color","COLORS","cm_primary_blue","title","description","onScroll","headerIcon","name","backgroundColor","className","style","iconPicker","Fragment","searchWrapper","search","placeholder","value","onChange","onReset","dataTestId","_size2","emptySearchResultContainer","emptySearchResultTitle","emptySearchResultDescription","emptySearchResultClearSearch","iconsListWrapper","contextTypes","Provider","childContextTypes","propTypes","process","env","NODE_ENV","PropTypes","bool","func","_default","exports"],"sources":["../../../src/molecule/icon-picker-modal/index.js"],"sourcesContent":["import React, {useMemo, useState, useCallback, useEffect} from 'react';\nimport PropTypes from 'prop-types';\nimport {fas} from '@fortawesome/pro-solid-svg-icons';\nimport {entries, map, pipe, get, values, slice, size, uniq} from 'lodash/fp';\nimport BaseModal from '../base-modal';\nimport SelectIcon from '../../atom/select-icon';\nimport Provider from '../../atom/provider';\nimport SearchForm from '../search-form';\nimport {COLORS} from '../../variables/colors';\nimport style from './style.css';\nimport useIconSearch from './use-icon-search';\n\nconst ICONS_PER_LOAD = 48;\n\nconst IconPickerModal = (props, context) => {\n const {isOpen, onCancel, onConfirm, onClose} = props;\n const {translate} = context;\n\n const [selectedIcon, setSelectedIcon] = useState(null);\n const [displayedIcons, setDisplayedIcons] = useState([]);\n const [currentIndex, setCurrentIndex] = useState(0);\n\n const allIcons = useMemo(() => pipe(values, map(get('iconName')), uniq)(fas), []);\n const {searchValue, searchResults, handleSearch, handleReset} = useIconSearch(allIcons);\n\n const handleCancel = useCallback(() => {\n onCancel();\n }, [onCancel]);\n\n const handleClose = useCallback(() => {\n onClose();\n }, [onClose]);\n\n const handleIconClick = useCallback(\n iconName => () => {\n setSelectedIcon(prevSelectedIcon => (prevSelectedIcon === iconName ? null : iconName));\n },\n []\n );\n\n const loadMoreIcons = useCallback(() => {\n const nextIndex = currentIndex + ICONS_PER_LOAD;\n const newIcons = slice(currentIndex, nextIndex, searchResults);\n setDisplayedIcons(prevIcons => [...prevIcons, ...newIcons]);\n setCurrentIndex(nextIndex);\n }, [currentIndex, searchResults]);\n\n useEffect(() => {\n setDisplayedIcons(() => slice(0, ICONS_PER_LOAD, searchResults));\n setCurrentIndex(ICONS_PER_LOAD);\n }, [searchResults]);\n\n const handleScroll = useCallback(\n event => {\n const {scrollTop, clientHeight, scrollHeight} = event.currentTarget;\n if (scrollHeight - scrollTop <= clientHeight + 1) {\n loadMoreIcons();\n }\n },\n [loadMoreIcons]\n );\n\n const icons = useMemo(\n () =>\n pipe(\n entries,\n map(([index, iconName]) => (\n <SelectIcon\n key={`icon-${index}`}\n size=\"responsive\"\n data-name={`icon-${index}`}\n aria-label={iconName}\n faIcon={iconName}\n onClick={handleIconClick(iconName)}\n options={{isSelected: selectedIcon === iconName}}\n />\n ))\n )(displayedIcons),\n [displayedIcons, selectedIcon, handleIconClick]\n );\n\n const footer = useMemo(() => {\n return {\n cancelButton: {\n onCancel: handleCancel,\n label: translate('cancel')\n },\n confirmButton: {\n onConfirm: () => {\n onConfirm(selectedIcon);\n setSelectedIcon(null);\n onClose();\n },\n label: translate('confirm'),\n iconName: 'plus',\n disabled: selectedIcon === null,\n color: COLORS.cm_primary_blue\n }\n };\n }, [handleCancel, onConfirm, onClose, translate, selectedIcon]);\n\n if (!isOpen) return null;\n\n return (\n <BaseModal\n title={translate('icon_picker_title')}\n description={translate('icon_picker_description')}\n isOpen={isOpen}\n onClose={handleClose}\n onScroll={handleScroll}\n footer={footer}\n headerIcon={{\n name: 'arrows-rotate',\n backgroundColor: '#D6E6FF'\n }}\n >\n <div className={style.iconPicker}>\n {\n <>\n <div className={style.searchWrapper}>\n <SearchForm\n search={{\n placeholder: translate('search_place_holder'),\n value: searchValue,\n onChange: handleSearch\n }}\n onReset={handleReset}\n dataTestId=\"search-input\"\n />\n </div>\n {searchValue && size(searchResults) === 0 ? (\n <div className={style.emptySearchResultContainer}>\n <div className={style.emptySearchResultTitle}>\n {translate('empty_search_result_title', {searchValue})}\n </div>\n <div className={style.emptySearchResultDescription}>\n {translate('empty_search_result_description')}\n </div>\n <div className={style.emptySearchResultClearSearch} onClick={handleReset}>\n {translate('empty_search_result_clear_search')}\n </div>\n </div>\n ) : (\n <div className={style.iconsListWrapper}>{icons}</div>\n )}\n </>\n }\n </div>\n </BaseModal>\n );\n};\n\nIconPickerModal.contextTypes = {\n translate: Provider.childContextTypes.translate\n};\n\nIconPickerModal.propTypes = {\n isOpen: PropTypes.bool,\n onCancel: PropTypes.func,\n onConfirm: PropTypes.func,\n onClose: PropTypes.func\n};\n\nexport default IconPickerModal;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_proSolidSvgIcons","_baseModal","_selectIcon","_provider","_searchForm","_colors","_style","_useIconSearch","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","ICONS_PER_LOAD","IconPickerModal","props","context","isOpen","onCancel","onConfirm","onClose","translate","selectedIcon","setSelectedIcon","useState","displayedIcons","setDisplayedIcons","currentIndex","setCurrentIndex","scrollContainerRef","useRef","lastScrollPosition","allIcons","useMemo","_pipe2","_values2","_map2","_get2","_uniq2","fas","searchValue","searchResults","handleSearch","handleReset","useIconSearch","handleCancel","useCallback","handleClose","loadMoreIcons","nextIndex","newIcons","_slice2","prevIcons","useEffect","handleScroll","event","scrollTop","clientHeight","scrollHeight","currentTarget","current","handleIconClick","iconName","prevSelectedIcon","createIconClickHandler","icons","_entries2","index","createElement","key","size","faIcon","onClick","options","isSelected","footer","cancelButton","label","confirmButton","disabled","color","COLORS","cm_primary_blue","title","description","onScroll","headerIcon","name","backgroundColor","className","style","iconPicker","Fragment","searchWrapper","search","placeholder","value","onChange","onReset","dataTestId","_size2","emptySearchResultContainer","emptySearchResultTitle","emptySearchResultDescription","emptySearchResultClearSearch","iconsListWrapper","contextTypes","Provider","childContextTypes","propTypes","process","env","NODE_ENV","PropTypes","bool","func","_default","exports"],"sources":["../../../src/molecule/icon-picker-modal/index.js"],"sourcesContent":["import React, {useMemo, useState, useCallback, useEffect, useRef} from 'react';\nimport PropTypes from 'prop-types';\nimport {fas} from '@fortawesome/pro-solid-svg-icons';\nimport {entries, map, pipe, get, values, slice, size, uniq} from 'lodash/fp';\nimport BaseModal from '../base-modal';\nimport SelectIcon from '../../atom/select-icon';\nimport Provider from '../../atom/provider';\nimport SearchForm from '../search-form';\nimport {COLORS} from '../../variables/colors';\nimport style from './style.css';\nimport useIconSearch from './use-icon-search';\n\nconst ICONS_PER_LOAD = 48;\n\nconst IconPickerModal = (props, context) => {\n const {isOpen, onCancel, onConfirm, onClose} = props;\n const {translate} = context;\n\n const [selectedIcon, setSelectedIcon] = useState(null);\n const [displayedIcons, setDisplayedIcons] = useState([]);\n const [currentIndex, setCurrentIndex] = useState(0);\n\n // Référence pour maintenir la position de scroll\n const scrollContainerRef = useRef(null);\n const lastScrollPosition = useRef(0);\n\n const allIcons = useMemo(() => pipe(values, map(get('iconName')), uniq)(fas), []);\n const {searchValue, searchResults, handleSearch, handleReset} = useIconSearch(allIcons);\n\n const handleCancel = useCallback(() => {\n onCancel();\n }, [onCancel]);\n\n const handleClose = useCallback(() => {\n onClose();\n }, [onClose]);\n\n const loadMoreIcons = useCallback(() => {\n const nextIndex = currentIndex + ICONS_PER_LOAD;\n const newIcons = slice(currentIndex, nextIndex, searchResults);\n setDisplayedIcons(prevIcons => [...prevIcons, ...newIcons]);\n setCurrentIndex(nextIndex);\n }, [currentIndex, searchResults]);\n\n useEffect(() => {\n setDisplayedIcons(() => slice(0, ICONS_PER_LOAD, searchResults));\n setCurrentIndex(ICONS_PER_LOAD);\n }, [searchResults]);\n\n const handleScroll = useCallback(\n event => {\n const {scrollTop, clientHeight, scrollHeight} = event.currentTarget;\n // Sauvegarder la position de scroll\n lastScrollPosition.current = scrollTop;\n\n if (scrollHeight - scrollTop <= clientHeight + 1) {\n loadMoreIcons();\n }\n },\n [loadMoreIcons]\n );\n\n // Effet pour restaurer la position de scroll après un re-render\n useEffect(() => {\n if (scrollContainerRef.current && lastScrollPosition.current > 0) {\n scrollContainerRef.current.scrollTop = lastScrollPosition.current;\n }\n }, [selectedIcon]);\n\n const handleIconClick = useCallback(\n iconName => {\n // Option 1: Sélection immédiate (recommandée pour Redux)\n // onConfirm(iconName);\n // onClose();\n\n // Option 2: Si vous voulez garder la sélection\n setSelectedIcon(prevSelectedIcon => (prevSelectedIcon === iconName ? null : iconName));\n },\n [setSelectedIcon]\n );\n\n // Créer une fonction de clic pour chaque icône\n const createIconClickHandler = useCallback(\n iconName => () => handleIconClick(iconName),\n [handleIconClick]\n );\n\n const icons = useMemo(\n () =>\n pipe(\n entries,\n map(([index, iconName]) => {\n return (\n <SelectIcon\n key={`icon-${iconName}`}\n size=\"responsive\"\n data-name={`icon-${iconName}`}\n aria-label={iconName}\n faIcon={iconName}\n onClick={createIconClickHandler(iconName)}\n options={{isSelected: selectedIcon === iconName}}\n />\n );\n })\n )(displayedIcons),\n [displayedIcons, selectedIcon, createIconClickHandler]\n );\n\n const footer = useMemo(() => {\n return {\n cancelButton: {\n onCancel: handleCancel,\n label: translate('cancel')\n },\n confirmButton: {\n onConfirm: () => {\n onConfirm(selectedIcon);\n setSelectedIcon(null);\n onClose();\n },\n label: translate('confirm'),\n iconName: 'plus',\n disabled: selectedIcon === null,\n color: COLORS.cm_primary_blue\n }\n };\n }, [handleCancel, onConfirm, onClose, translate, selectedIcon]);\n\n if (!isOpen) return null;\n\n return (\n <BaseModal\n title={translate('icon_picker_title')}\n description={translate('icon_picker_description')}\n isOpen={isOpen}\n onClose={handleClose}\n onScroll={handleScroll}\n footer={footer}\n headerIcon={{\n name: 'arrows-rotate',\n backgroundColor: '#D6E6FF'\n }}\n scrollContainerRef={scrollContainerRef}\n >\n <div className={style.iconPicker}>\n {\n <>\n <div className={style.searchWrapper}>\n <SearchForm\n search={{\n placeholder: translate('search_place_holder'),\n value: searchValue,\n onChange: handleSearch\n }}\n onReset={handleReset}\n dataTestId=\"search-input\"\n />\n </div>\n {searchValue && size(searchResults) === 0 ? (\n <div className={style.emptySearchResultContainer}>\n <div className={style.emptySearchResultTitle}>\n {translate('empty_search_result_title', {searchValue})}\n </div>\n <div className={style.emptySearchResultDescription}>\n {translate('empty_search_result_description')}\n </div>\n <div className={style.emptySearchResultClearSearch} onClick={handleReset}>\n {translate('empty_search_result_clear_search')}\n </div>\n </div>\n ) : (\n <div className={style.iconsListWrapper}>{icons}</div>\n )}\n </>\n }\n </div>\n </BaseModal>\n );\n};\n\nIconPickerModal.contextTypes = {\n translate: Provider.childContextTypes.translate\n};\n\nIconPickerModal.propTypes = {\n isOpen: PropTypes.bool,\n onCancel: PropTypes.func,\n onConfirm: PropTypes.func,\n onClose: PropTypes.func\n};\n\nexport default IconPickerModal;\n"],"mappings":"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","ignoreList":[]}
|
package/locales/bs/global.json
CHANGED
|
@@ -181,11 +181,11 @@
|
|
|
181
181
|
"invalid_scorm": "scorm datoteka nije važeća",
|
|
182
182
|
"show_errors": "pokazati greške"
|
|
183
183
|
},
|
|
184
|
-
"content_type_article": "
|
|
185
|
-
"content_type_video": "
|
|
184
|
+
"content_type_article": "Članak",
|
|
185
|
+
"content_type_video": "Videozapis",
|
|
186
186
|
"content_type_podcast": "Podcast",
|
|
187
|
-
"content_type_scorm": "
|
|
188
|
-
"content_type_course": "
|
|
187
|
+
"content_type_scorm": "Animirani resurs",
|
|
188
|
+
"content_type_course": "Kurs",
|
|
189
189
|
"review_this_skill": "Pregledajte ovu vještinu",
|
|
190
190
|
"review_skill_empty": "Još nemate vještinu za reviziju",
|
|
191
191
|
"review_skill_empty_description": "Prvo morate završiti kurseve prije nego što možete provjeriti različite vještine.",
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
},
|
|
204
204
|
"esante-formation": {
|
|
205
205
|
"diploma": "Learning path",
|
|
206
|
-
"rewards": "
|
|
206
|
+
"rewards": "Ovjera"
|
|
207
207
|
},
|
|
208
208
|
"ehc-vd": {
|
|
209
209
|
"diploma": "certificate"
|
package/locales/cs/global.json
CHANGED
|
@@ -181,11 +181,11 @@
|
|
|
181
181
|
"invalid_scorm": "soubor scorm je neplatný",
|
|
182
182
|
"show_errors": "zobrazit chyby"
|
|
183
183
|
},
|
|
184
|
-
"content_type_article": "
|
|
184
|
+
"content_type_article": "Článek",
|
|
185
185
|
"content_type_video": "Video",
|
|
186
186
|
"content_type_podcast": "Podcast",
|
|
187
|
-
"content_type_scorm": "
|
|
188
|
-
"content_type_course": "
|
|
187
|
+
"content_type_scorm": "Animovaný zdroj",
|
|
188
|
+
"content_type_course": "Kurs",
|
|
189
189
|
"review_this_skill": "Zkontrolujte tuto dovednost",
|
|
190
190
|
"review_skill_empty": "Zatím nemáte žádnou dovednost k prověření",
|
|
191
191
|
"review_skill_empty_description": "Nejprve musíte dokončit kurzy, než budete moci prověřovat různé dovednosti.",
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
},
|
|
204
204
|
"esante-formation": {
|
|
205
205
|
"diploma": "Learning path",
|
|
206
|
-
"rewards": "
|
|
206
|
+
"rewards": "Osvědčení"
|
|
207
207
|
},
|
|
208
208
|
"ehc-vd": {
|
|
209
209
|
"diploma": "certificate"
|
package/locales/de/global.json
CHANGED
|
@@ -181,11 +181,11 @@
|
|
|
181
181
|
"invalid_scorm": "Scorm-Datei ist ungültig",
|
|
182
182
|
"show_errors": "Fehler anzeigen"
|
|
183
183
|
},
|
|
184
|
-
"content_type_article": "
|
|
184
|
+
"content_type_article": "Artikel",
|
|
185
185
|
"content_type_video": "Video",
|
|
186
186
|
"content_type_podcast": "Podcast",
|
|
187
|
-
"content_type_scorm": "
|
|
188
|
-
"content_type_course": "
|
|
187
|
+
"content_type_scorm": "Animierte Ressource",
|
|
188
|
+
"content_type_course": "Kurs",
|
|
189
189
|
"review_this_skill": "Diese Fähigkeit überprüfen",
|
|
190
190
|
"review_skill_empty": "Sie haben noch keine Fähigkeiten zum Überarbeiten",
|
|
191
191
|
"review_skill_empty_description": "Sie müssen erst Kurse abschließen, bevor Sie verschiedene Fähigkeiten überprüfen können.",
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
},
|
|
204
204
|
"esante-formation": {
|
|
205
205
|
"diploma": "Learning path",
|
|
206
|
-
"rewards": "
|
|
206
|
+
"rewards": "Bescheinigung"
|
|
207
207
|
},
|
|
208
208
|
"ehc-vd": {
|
|
209
209
|
"diploma": "certificate"
|
package/locales/es/global.json
CHANGED
|
@@ -181,11 +181,11 @@
|
|
|
181
181
|
"invalid_scorm": "el archivo scorm no es válido",
|
|
182
182
|
"show_errors": "mostrar errores"
|
|
183
183
|
},
|
|
184
|
-
"content_type_article": "
|
|
184
|
+
"content_type_article": "Artículo",
|
|
185
185
|
"content_type_video": "Video",
|
|
186
186
|
"content_type_podcast": "Podcast",
|
|
187
|
-
"content_type_scorm": "
|
|
188
|
-
"content_type_course": "
|
|
187
|
+
"content_type_scorm": "Recurso animado",
|
|
188
|
+
"content_type_course": "Curso",
|
|
189
189
|
"review_this_skill": "Revisa esta habilidad",
|
|
190
190
|
"review_skill_empty": "Aún no tienes ninguna habilidad para repasar",
|
|
191
191
|
"review_skill_empty_description": "Primero tienes que completar los cursos antes de poder repasar habilidades diferentes.",
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
},
|
|
204
204
|
"esante-formation": {
|
|
205
205
|
"diploma": "Learning path",
|
|
206
|
-
"rewards": "
|
|
206
|
+
"rewards": "Atestación"
|
|
207
207
|
},
|
|
208
208
|
"ehc-vd": {
|
|
209
209
|
"diploma": "certificate"
|
package/locales/et/global.json
CHANGED
|
@@ -181,11 +181,11 @@
|
|
|
181
181
|
"invalid_scorm": "scormi fail ei ole kehtiv",
|
|
182
182
|
"show_errors": "näidata vigu"
|
|
183
183
|
},
|
|
184
|
-
"content_type_article": "
|
|
184
|
+
"content_type_article": "Artikkel",
|
|
185
185
|
"content_type_video": "Video",
|
|
186
186
|
"content_type_podcast": "Podcast",
|
|
187
|
-
"content_type_scorm": "
|
|
188
|
-
"content_type_course": "
|
|
187
|
+
"content_type_scorm": "Animeeritud ressurss",
|
|
188
|
+
"content_type_course": "Kursus",
|
|
189
189
|
"review_this_skill": "Vaadake see oskus üle",
|
|
190
190
|
"review_skill_empty": "Sul puuduvad ülevaatuseks oskused",
|
|
191
191
|
"review_skill_empty_description": "Enne eri oskuste ülevaatamist tuleb sul läbida kursused.",
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
},
|
|
204
204
|
"esante-formation": {
|
|
205
205
|
"diploma": "Learning path",
|
|
206
|
-
"rewards": "
|
|
206
|
+
"rewards": "Kinnitamine"
|
|
207
207
|
},
|
|
208
208
|
"ehc-vd": {
|
|
209
209
|
"diploma": "certificate"
|
package/locales/fi/global.json
CHANGED
|
@@ -181,11 +181,11 @@
|
|
|
181
181
|
"invalid_scorm": "Scorm-tiedosto ei ole käypä",
|
|
182
182
|
"show_errors": "näytä virheet"
|
|
183
183
|
},
|
|
184
|
-
"content_type_article": "
|
|
184
|
+
"content_type_article": "Artikla",
|
|
185
185
|
"content_type_video": "Video",
|
|
186
186
|
"content_type_podcast": "Podcast",
|
|
187
|
-
"content_type_scorm": "
|
|
188
|
-
"content_type_course": "
|
|
187
|
+
"content_type_scorm": "Animoitu resurssi",
|
|
188
|
+
"content_type_course": "Kurssi",
|
|
189
189
|
"review_this_skill": "Tarkista tämä taito",
|
|
190
190
|
"review_skill_empty": "Sinulla ei ole vielä kerrattavia valmiuksia",
|
|
191
191
|
"review_skill_empty_description": "Sinun on ensin suoritettava kursseja ennen kuin voit kerrata eri valmiuksia.",
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
},
|
|
204
204
|
"esante-formation": {
|
|
205
205
|
"diploma": "Oppimispolku",
|
|
206
|
-
"rewards": "
|
|
206
|
+
"rewards": "Todistus"
|
|
207
207
|
},
|
|
208
208
|
"ehc-vd": {
|
|
209
209
|
"diploma": "todistus"
|
package/locales/fr/global.json
CHANGED
|
@@ -182,10 +182,10 @@
|
|
|
182
182
|
"show_errors": "afficher les erreurs"
|
|
183
183
|
},
|
|
184
184
|
"content_type_article": "Article",
|
|
185
|
-
"content_type_video": "
|
|
185
|
+
"content_type_video": "Vidéo",
|
|
186
186
|
"content_type_podcast": "Podcast",
|
|
187
|
-
"content_type_scorm": "
|
|
188
|
-
"content_type_course": "
|
|
187
|
+
"content_type_scorm": "Ressource animée",
|
|
188
|
+
"content_type_course": "Cours",
|
|
189
189
|
"review_this_skill": "Revoir cette compétence",
|
|
190
190
|
"review_skill_empty": "Vous n'avez pas encore de compétence à réviser",
|
|
191
191
|
"review_skill_empty_description": "Vous devez d'abord suivre des cours avant de pouvoir réviser différentes compétences.",
|
package/locales/hr/global.json
CHANGED
|
@@ -181,11 +181,11 @@
|
|
|
181
181
|
"invalid_scorm": "scorm datoteka nije ispravna",
|
|
182
182
|
"show_errors": "pokazati greške"
|
|
183
183
|
},
|
|
184
|
-
"content_type_article": "
|
|
184
|
+
"content_type_article": "Članak",
|
|
185
185
|
"content_type_video": "Video",
|
|
186
186
|
"content_type_podcast": "Podcast",
|
|
187
|
-
"content_type_scorm": "
|
|
188
|
-
"content_type_course": "
|
|
187
|
+
"content_type_scorm": "Animirani resurs",
|
|
188
|
+
"content_type_course": "Tečaj",
|
|
189
189
|
"review_this_skill": "Pregledajte ovu vještinu",
|
|
190
190
|
"review_skill_empty": "Još nemaš vještinu za pregled",
|
|
191
191
|
"review_skill_empty_description": "Prvo moraš završiti tečajeve prije nego što možeš pregledavati različite vještine.",
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
},
|
|
204
204
|
"esante-formation": {
|
|
205
205
|
"diploma": "Learning path",
|
|
206
|
-
"rewards": "
|
|
206
|
+
"rewards": "Ovjeravanje"
|
|
207
207
|
},
|
|
208
208
|
"ehc-vd": {
|
|
209
209
|
"diploma": "certificate"
|
package/locales/hu/global.json
CHANGED
|
@@ -181,11 +181,11 @@
|
|
|
181
181
|
"invalid_scorm": "scorm fájl nem érvényes",
|
|
182
182
|
"show_errors": "hibákat mutatni"
|
|
183
183
|
},
|
|
184
|
-
"content_type_article": "
|
|
185
|
-
"content_type_video": "
|
|
184
|
+
"content_type_article": "Cikk",
|
|
185
|
+
"content_type_video": "Videó",
|
|
186
186
|
"content_type_podcast": "Podcast",
|
|
187
|
-
"content_type_scorm": "
|
|
188
|
-
"content_type_course": "
|
|
187
|
+
"content_type_scorm": "Animált erőforrás",
|
|
188
|
+
"content_type_course": "Pálya",
|
|
189
189
|
"review_this_skill": "Tekintse át ezt a képességet",
|
|
190
190
|
"review_skill_empty": "Még nincs javítható képességed",
|
|
191
191
|
"review_skill_empty_description": "Először tanfolyamokat kell elvégezned, mielőtt áttekinthetnéd a különböző képességeket.",
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
},
|
|
204
204
|
"esante-formation": {
|
|
205
205
|
"diploma": "Learning path",
|
|
206
|
-
"rewards": "
|
|
206
|
+
"rewards": "Tanúsítvány"
|
|
207
207
|
},
|
|
208
208
|
"ehc-vd": {
|
|
209
209
|
"diploma": "certificate"
|
package/locales/hy/global.json
CHANGED
|
@@ -181,11 +181,11 @@
|
|
|
181
181
|
"invalid_scorm": "scorm ֆայլը վավեր չէ",
|
|
182
182
|
"show_errors": "ցույց տալ սխալները"
|
|
183
183
|
},
|
|
184
|
-
"content_type_article": "
|
|
185
|
-
"content_type_video": "
|
|
186
|
-
"content_type_podcast": "
|
|
187
|
-
"content_type_scorm": "
|
|
188
|
-
"content_type_course": "
|
|
184
|
+
"content_type_article": "Հոդված",
|
|
185
|
+
"content_type_video": "Տեսանյութ",
|
|
186
|
+
"content_type_podcast": "Փոդքասթ",
|
|
187
|
+
"content_type_scorm": "Անիմացիոն ռեսուրս",
|
|
188
|
+
"content_type_course": "Դասընթաց",
|
|
189
189
|
"review_this_skill": "Վերանայեք այս հմտությունը",
|
|
190
190
|
"review_skill_empty": "Դեռևս վերանայելու հմտություն չունեք",
|
|
191
191
|
"review_skill_empty_description": "Սկզբում դուք պետք է ավարտեք դասընթացները, որպեսզի կարողանաք վերանայել տարբեր հմտություններ:",
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
},
|
|
204
204
|
"esante-formation": {
|
|
205
205
|
"diploma": "Learning path",
|
|
206
|
-
"rewards": "
|
|
206
|
+
"rewards": "Վկայագիր"
|
|
207
207
|
},
|
|
208
208
|
"ehc-vd": {
|
|
209
209
|
"diploma": "certificate"
|
package/locales/it/global.json
CHANGED
|
@@ -181,11 +181,11 @@
|
|
|
181
181
|
"invalid_scorm": "Il file scorm non è valido",
|
|
182
182
|
"show_errors": "mostrare errori"
|
|
183
183
|
},
|
|
184
|
-
"content_type_article": "
|
|
184
|
+
"content_type_article": "Articolo",
|
|
185
185
|
"content_type_video": "Video",
|
|
186
186
|
"content_type_podcast": "Podcast",
|
|
187
|
-
"content_type_scorm": "
|
|
188
|
-
"content_type_course": "
|
|
187
|
+
"content_type_scorm": "Risorsa animata",
|
|
188
|
+
"content_type_course": "Corso",
|
|
189
189
|
"review_this_skill": "Rivedi questa abilità",
|
|
190
190
|
"review_skill_empty": "Non hai ancora la capacità di rivedere",
|
|
191
191
|
"review_skill_empty_description": "Per prima cosa devi completare i corsi prima di poter rivedere le diverse competenze.",
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
},
|
|
204
204
|
"esante-formation": {
|
|
205
205
|
"diploma": "Learning path",
|
|
206
|
-
"rewards": "
|
|
206
|
+
"rewards": "Attestazione"
|
|
207
207
|
},
|
|
208
208
|
"ehc-vd": {
|
|
209
209
|
"diploma": "certificate"
|
package/locales/ja/global.json
CHANGED
|
@@ -181,11 +181,11 @@
|
|
|
181
181
|
"invalid_scorm": "SCORMファイルが有効ではありません",
|
|
182
182
|
"show_errors": "エラーを表示する"
|
|
183
183
|
},
|
|
184
|
-
"content_type_article": "
|
|
185
|
-
"content_type_video": "
|
|
186
|
-
"content_type_podcast": "
|
|
187
|
-
"content_type_scorm": "
|
|
188
|
-
"content_type_course": "
|
|
184
|
+
"content_type_article": "記事",
|
|
185
|
+
"content_type_video": "ビデオ",
|
|
186
|
+
"content_type_podcast": "ポッドキャスト",
|
|
187
|
+
"content_type_scorm": "アニメーションリソース",
|
|
188
|
+
"content_type_course": "コース",
|
|
189
189
|
"review_this_skill": "このスキルを確認する",
|
|
190
190
|
"review_skill_empty": "まだ復習するスキルがありません",
|
|
191
191
|
"review_skill_empty_description": "異なるスキルを復習するには、まずコースを修了する必要があります。",
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
},
|
|
204
204
|
"esante-formation": {
|
|
205
205
|
"diploma": "Learning path",
|
|
206
|
-
"rewards": "
|
|
206
|
+
"rewards": "証明"
|
|
207
207
|
},
|
|
208
208
|
"ehc-vd": {
|
|
209
209
|
"diploma": "certificate"
|
package/locales/ko/global.json
CHANGED
|
@@ -181,11 +181,11 @@
|
|
|
181
181
|
"invalid_scorm": "scorm 파일이 유효하지 않습니다",
|
|
182
182
|
"show_errors": "오류 표시"
|
|
183
183
|
},
|
|
184
|
-
"content_type_article": "
|
|
185
|
-
"content_type_video": "
|
|
186
|
-
"content_type_podcast": "
|
|
187
|
-
"content_type_scorm": "
|
|
188
|
-
"content_type_course": "
|
|
184
|
+
"content_type_article": "기사",
|
|
185
|
+
"content_type_video": "동영상",
|
|
186
|
+
"content_type_podcast": "팟캐스트",
|
|
187
|
+
"content_type_scorm": "애니메이션 리소스",
|
|
188
|
+
"content_type_course": "강의",
|
|
189
189
|
"review_this_skill": "이 기술을 검토하세요",
|
|
190
190
|
"review_skill_empty": "아직 수정할 기술이 없습니다.",
|
|
191
191
|
"review_skill_empty_description": "다양한 기술을 복습하려면 먼저 과정을 끝내야 합니다.",
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
},
|
|
204
204
|
"esante-formation": {
|
|
205
205
|
"diploma": "Learning path",
|
|
206
|
-
"rewards": "
|
|
206
|
+
"rewards": "증명"
|
|
207
207
|
},
|
|
208
208
|
"ehc-vd": {
|
|
209
209
|
"diploma": "certificate"
|
package/locales/nl/global.json
CHANGED
|
@@ -181,11 +181,11 @@
|
|
|
181
181
|
"invalid_scorm": "scorm-bestand is niet geldig",
|
|
182
182
|
"show_errors": "fouten tonen"
|
|
183
183
|
},
|
|
184
|
-
"content_type_article": "
|
|
184
|
+
"content_type_article": "Artikel",
|
|
185
185
|
"content_type_video": "Video",
|
|
186
186
|
"content_type_podcast": "Podcast",
|
|
187
|
-
"content_type_scorm": "
|
|
188
|
-
"content_type_course": "
|
|
187
|
+
"content_type_scorm": "Geanimeerde bron",
|
|
188
|
+
"content_type_course": "Cursus",
|
|
189
189
|
"review_this_skill": "Bekijk deze vaardigheid",
|
|
190
190
|
"review_skill_empty": "Je hebt nog geen vaardigheid om te herhalen",
|
|
191
191
|
"review_skill_empty_description": "Je moet eerst cursussen voltooien, voordat je verschillende vaardigheden kunt reviewen.",
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
},
|
|
204
204
|
"esante-formation": {
|
|
205
205
|
"diploma": "Learning path",
|
|
206
|
-
"rewards": "
|
|
206
|
+
"rewards": "Attestatie"
|
|
207
207
|
},
|
|
208
208
|
"ehc-vd": {
|
|
209
209
|
"diploma": "certificate"
|
package/locales/pl/global.json
CHANGED
|
@@ -181,11 +181,11 @@
|
|
|
181
181
|
"invalid_scorm": "Plik scorm nie jest poprawny",
|
|
182
182
|
"show_errors": "pokaż błędy"
|
|
183
183
|
},
|
|
184
|
-
"content_type_article": "
|
|
185
|
-
"content_type_video": "
|
|
184
|
+
"content_type_article": "Artykuł",
|
|
185
|
+
"content_type_video": "Wideo",
|
|
186
186
|
"content_type_podcast": "Podcast",
|
|
187
|
-
"content_type_scorm": "
|
|
188
|
-
"content_type_course": "
|
|
187
|
+
"content_type_scorm": "Zasób animowany",
|
|
188
|
+
"content_type_course": "Kurs",
|
|
189
189
|
"review_this_skill": "Przejrzyj tę umiejętność",
|
|
190
190
|
"review_skill_empty": "Nie masz jeszcze umiejętności do utrwalenia",
|
|
191
191
|
"review_skill_empty_description": "Aby utrwalać wybrane umiejętności, najpierw musisz ukończyć kursy.",
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
},
|
|
204
204
|
"esante-formation": {
|
|
205
205
|
"diploma": "Learning path",
|
|
206
|
-
"rewards": "
|
|
206
|
+
"rewards": "Zaświadczenie"
|
|
207
207
|
},
|
|
208
208
|
"ehc-vd": {
|
|
209
209
|
"diploma": "certificate"
|
package/locales/pt/global.json
CHANGED
|
@@ -181,11 +181,11 @@
|
|
|
181
181
|
"invalid_scorm": "o ficheiro scorm não é válido ",
|
|
182
182
|
"show_errors": "mostrar erros"
|
|
183
183
|
},
|
|
184
|
-
"content_type_article": "
|
|
185
|
-
"content_type_video": "
|
|
184
|
+
"content_type_article": "Artigo",
|
|
185
|
+
"content_type_video": "Vídeo",
|
|
186
186
|
"content_type_podcast": "Podcast",
|
|
187
|
-
"content_type_scorm": "
|
|
188
|
-
"content_type_course": "
|
|
187
|
+
"content_type_scorm": "Recurso animado",
|
|
188
|
+
"content_type_course": "Curso",
|
|
189
189
|
"review_this_skill": "Revise esta habilidade",
|
|
190
190
|
"review_skill_empty": "Ainda não tem competências para rever",
|
|
191
191
|
"review_skill_empty_description": "Antes de poder rever diferentes competências necessita, em primeiro lugar, de concluir cursos.",
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
},
|
|
204
204
|
"esante-formation": {
|
|
205
205
|
"diploma": "Learning path",
|
|
206
|
-
"rewards": "
|
|
206
|
+
"rewards": "Atestado"
|
|
207
207
|
},
|
|
208
208
|
"ehc-vd": {
|
|
209
209
|
"diploma": "certificate"
|
package/locales/ro/global.json
CHANGED
|
@@ -181,11 +181,11 @@
|
|
|
181
181
|
"invalid_scorm": "fișierul scorm nu este valid",
|
|
182
182
|
"show_errors": "arata erori"
|
|
183
183
|
},
|
|
184
|
-
"content_type_article": "
|
|
184
|
+
"content_type_article": "Articol",
|
|
185
185
|
"content_type_video": "Video",
|
|
186
186
|
"content_type_podcast": "Podcast",
|
|
187
|
-
"content_type_scorm": "
|
|
188
|
-
"content_type_course": "
|
|
187
|
+
"content_type_scorm": "Resursă animată",
|
|
188
|
+
"content_type_course": "Curs",
|
|
189
189
|
"review_this_skill": "Examinați această abilitate",
|
|
190
190
|
"review_skill_empty": "Nu aveți nicio abilitate de recapitulat deocamdată",
|
|
191
191
|
"review_skill_empty_description": "Mai întâi trebuie să finalizați cursurile înainte de a putea recapitula diferite abilități.",
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
},
|
|
204
204
|
"esante-formation": {
|
|
205
205
|
"diploma": "Learning path",
|
|
206
|
-
"rewards": "
|
|
206
|
+
"rewards": "Atestare"
|
|
207
207
|
},
|
|
208
208
|
"ehc-vd": {
|
|
209
209
|
"diploma": "certificate"
|
package/locales/ru/global.json
CHANGED
|
@@ -181,11 +181,11 @@
|
|
|
181
181
|
"invalid_scorm": "файл scorm недействителен",
|
|
182
182
|
"show_errors": "показать ошибки"
|
|
183
183
|
},
|
|
184
|
-
"content_type_article": "
|
|
185
|
-
"content_type_video": "
|
|
186
|
-
"content_type_podcast": "
|
|
187
|
-
"content_type_scorm": "
|
|
188
|
-
"content_type_course": "
|
|
184
|
+
"content_type_article": "Статья",
|
|
185
|
+
"content_type_video": "Видео",
|
|
186
|
+
"content_type_podcast": "Подкаст",
|
|
187
|
+
"content_type_scorm": "Анимированный ресурс",
|
|
188
|
+
"content_type_course": "Курс",
|
|
189
189
|
"review_this_skill": "Повторить этот навык",
|
|
190
190
|
"review_skill_empty": "У вас еще нет навыков для повторения",
|
|
191
191
|
"review_skill_empty_description": "Сначала вам необходимо пройти курсы, прежде чем вы сможете проверить различные навыки.",
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
},
|
|
204
204
|
"esante-formation": {
|
|
205
205
|
"diploma": "Learning path",
|
|
206
|
-
"rewards": "
|
|
206
|
+
"rewards": "Аттестация"
|
|
207
207
|
},
|
|
208
208
|
"ehc-vd": {
|
|
209
209
|
"diploma": "certificate"
|
package/locales/sk/global.json
CHANGED
|
@@ -181,11 +181,11 @@
|
|
|
181
181
|
"invalid_scorm": "scorm súbor je neplatný",
|
|
182
182
|
"show_errors": "zobraziť chyby"
|
|
183
183
|
},
|
|
184
|
-
"content_type_article": "
|
|
184
|
+
"content_type_article": "Článok",
|
|
185
185
|
"content_type_video": "Video",
|
|
186
186
|
"content_type_podcast": "Podcast",
|
|
187
|
-
"content_type_scorm": "
|
|
188
|
-
"content_type_course": "
|
|
187
|
+
"content_type_scorm": "Animovaný zdroj",
|
|
188
|
+
"content_type_course": "Kurz",
|
|
189
189
|
"review_this_skill": "Skontrolujte túto zručnosť",
|
|
190
190
|
"review_skill_empty": "Zatiaľ nemáte žiadne zručnosti na kontrolu",
|
|
191
191
|
"review_skill_empty_description": "Najprv musíte dokončiť kurzy, následne si môžete vyskúšať rôzne zručnosti.",
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
},
|
|
204
204
|
"esante-formation": {
|
|
205
205
|
"diploma": "Learning path",
|
|
206
|
-
"rewards": "
|
|
206
|
+
"rewards": "Osvedčenie"
|
|
207
207
|
},
|
|
208
208
|
"ehc-vd": {
|
|
209
209
|
"diploma": "certificate"
|
package/locales/sl/global.json
CHANGED
|
@@ -181,11 +181,11 @@
|
|
|
181
181
|
"invalid_scorm": "datoteka scorm ni veljavna",
|
|
182
182
|
"show_errors": "pokaži napake"
|
|
183
183
|
},
|
|
184
|
-
"content_type_article": "
|
|
185
|
-
"content_type_video": "
|
|
186
|
-
"content_type_podcast": "
|
|
187
|
-
"content_type_scorm": "
|
|
188
|
-
"content_type_course": "
|
|
184
|
+
"content_type_article": "Članek",
|
|
185
|
+
"content_type_video": "Videoposnetek",
|
|
186
|
+
"content_type_podcast": "Podkast",
|
|
187
|
+
"content_type_scorm": "Animirani vir",
|
|
188
|
+
"content_type_course": "Tečaj",
|
|
189
189
|
"review_this_skill": "Preglejte to veščino",
|
|
190
190
|
"review_skill_empty": "Nimate še nobene veščine za preverjanje",
|
|
191
191
|
"review_skill_empty_description": "Najprej morate opraviti tečaje, preden lahko preverite različna znanja.",
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
},
|
|
204
204
|
"esante-formation": {
|
|
205
205
|
"diploma": "Učna pot",
|
|
206
|
-
"rewards": "
|
|
206
|
+
"rewards": "Potrdilo"
|
|
207
207
|
},
|
|
208
208
|
"ehc-vd": {
|
|
209
209
|
"diploma": "potrdilo"
|
package/locales/sv/global.json
CHANGED
|
@@ -181,11 +181,11 @@
|
|
|
181
181
|
"invalid_scorm": "scorm-filen är ogiltig",
|
|
182
182
|
"show_errors": "visa fel"
|
|
183
183
|
},
|
|
184
|
-
"content_type_article": "
|
|
184
|
+
"content_type_article": "Artikel",
|
|
185
185
|
"content_type_video": "Video",
|
|
186
186
|
"content_type_podcast": "Podcast",
|
|
187
|
-
"content_type_scorm": "
|
|
188
|
-
"content_type_course": "
|
|
187
|
+
"content_type_scorm": "Animerad resurs",
|
|
188
|
+
"content_type_course": "Kurs",
|
|
189
189
|
"review_this_skill": "Granska denna färdighet",
|
|
190
190
|
"review_skill_empty": "Du har ingen färdighet att repetera än",
|
|
191
191
|
"review_skill_empty_description": "Innan du kan repetera olika färdigheter måste du slutföra kurserna.",
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
},
|
|
204
204
|
"esante-formation": {
|
|
205
205
|
"diploma": "Inlärningsväg",
|
|
206
|
-
"rewards": "
|
|
206
|
+
"rewards": "Intyg"
|
|
207
207
|
},
|
|
208
208
|
"ehc-vd": {
|
|
209
209
|
"diploma": "certifikat"
|
package/locales/tl/global.json
CHANGED
|
@@ -181,11 +181,11 @@
|
|
|
181
181
|
"invalid_scorm": "Hindi balido ang scorm file",
|
|
182
182
|
"show_errors": "ipakita ang mga pagkakamali"
|
|
183
183
|
},
|
|
184
|
-
"content_type_article": "
|
|
184
|
+
"content_type_article": "Artikulo",
|
|
185
185
|
"content_type_video": "Video",
|
|
186
186
|
"content_type_podcast": "Podcast",
|
|
187
|
-
"content_type_scorm": "Animated
|
|
188
|
-
"content_type_course": "
|
|
187
|
+
"content_type_scorm": "Animated na mapagkukunan",
|
|
188
|
+
"content_type_course": "kurso",
|
|
189
189
|
"review_this_skill": "Suriin ang kasanayang ito",
|
|
190
190
|
"review_skill_empty": "Wala ka pang kasanayang rerepasuhin",
|
|
191
191
|
"review_skill_empty_description": "Una kailangan mong kumumpleto ng mga kurso bago ka makapagrepaso ng iba't-ibang kasanayan.",
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
},
|
|
204
204
|
"esante-formation": {
|
|
205
205
|
"diploma": "Learning path",
|
|
206
|
-
"rewards": "
|
|
206
|
+
"rewards": "Pagpapatunay"
|
|
207
207
|
},
|
|
208
208
|
"ehc-vd": {
|
|
209
209
|
"diploma": "certificate"
|
package/locales/tr/global.json
CHANGED
|
@@ -181,11 +181,11 @@
|
|
|
181
181
|
"invalid_scorm": "scorm dosyası geçersiz",
|
|
182
182
|
"show_errors": "hataları göster"
|
|
183
183
|
},
|
|
184
|
-
"content_type_article": "
|
|
184
|
+
"content_type_article": "Madde",
|
|
185
185
|
"content_type_video": "Video",
|
|
186
186
|
"content_type_podcast": "Podcast",
|
|
187
|
-
"content_type_scorm": "
|
|
188
|
-
"content_type_course": "
|
|
187
|
+
"content_type_scorm": "Animasyonlu kaynak",
|
|
188
|
+
"content_type_course": "Kurs",
|
|
189
189
|
"review_this_skill": "Bu beceriyi gözden geçirin",
|
|
190
190
|
"review_skill_empty": "Henüz revize etme beceriniz bulunmuyor",
|
|
191
191
|
"review_skill_empty_description": "Farklı becerileri tekrar etmeden önce kursları tamamlamanız gerekir.",
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
},
|
|
204
204
|
"esante-formation": {
|
|
205
205
|
"diploma": "Learning path",
|
|
206
|
-
"rewards": "
|
|
206
|
+
"rewards": "Tasdik"
|
|
207
207
|
},
|
|
208
208
|
"ehc-vd": {
|
|
209
209
|
"diploma": "certificate"
|
package/locales/uk/global.json
CHANGED
|
@@ -181,11 +181,11 @@
|
|
|
181
181
|
"invalid_scorm": "SCORM-файл є недійсним",
|
|
182
182
|
"show_errors": "показати помилки"
|
|
183
183
|
},
|
|
184
|
-
"content_type_article": "
|
|
185
|
-
"content_type_video": "
|
|
186
|
-
"content_type_podcast": "
|
|
187
|
-
"content_type_scorm": "
|
|
188
|
-
"content_type_course": "
|
|
184
|
+
"content_type_article": "Стаття",
|
|
185
|
+
"content_type_video": "Відео",
|
|
186
|
+
"content_type_podcast": "Подкаст",
|
|
187
|
+
"content_type_scorm": "Анімований ресурс",
|
|
188
|
+
"content_type_course": "Курс",
|
|
189
189
|
"review_this_skill": "Перегляньте цей навик",
|
|
190
190
|
"review_skill_empty": "У вас ще немає навичок для перегляду",
|
|
191
191
|
"review_skill_empty_description": "Спочатку вам потрібно пройти курси, перш ніж ви зможете переглянути різні навички.",
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
},
|
|
204
204
|
"esante-formation": {
|
|
205
205
|
"diploma": "Learning path",
|
|
206
|
-
"rewards": "
|
|
206
|
+
"rewards": "Атестація"
|
|
207
207
|
},
|
|
208
208
|
"ehc-vd": {
|
|
209
209
|
"diploma": "certificate"
|
package/locales/vi/global.json
CHANGED
|
@@ -181,11 +181,11 @@
|
|
|
181
181
|
"invalid_scorm": "tập tin scorm là không hợp lệ",
|
|
182
182
|
"show_errors": "hiển thị lỗi"
|
|
183
183
|
},
|
|
184
|
-
"content_type_article": "
|
|
185
|
-
"content_type_video": "
|
|
184
|
+
"content_type_article": "Bài báo",
|
|
185
|
+
"content_type_video": "Băng hình",
|
|
186
186
|
"content_type_podcast": "Podcast",
|
|
187
|
-
"content_type_scorm": "
|
|
188
|
-
"content_type_course": "
|
|
187
|
+
"content_type_scorm": "Tài nguyên hoạt hình",
|
|
188
|
+
"content_type_course": "Khóa học",
|
|
189
189
|
"review_this_skill": "Xem lại kỹ năng này",
|
|
190
190
|
"review_skill_empty": "Bạn chưa có kỹ năng nào để ôn tập",
|
|
191
191
|
"review_skill_empty_description": "Trước tiên, bạn cần phải hoàn thành các khóa học rồi mới có thể ôn tập các kỹ năng khác nhau.",
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
},
|
|
204
204
|
"esante-formation": {
|
|
205
205
|
"diploma": "Learning path",
|
|
206
|
-
"rewards": "
|
|
206
|
+
"rewards": "Chứng thực"
|
|
207
207
|
},
|
|
208
208
|
"ehc-vd": {
|
|
209
209
|
"diploma": "certificate"
|
package/locales/zh/global.json
CHANGED
|
@@ -181,11 +181,11 @@
|
|
|
181
181
|
"invalid_scorm": "scorm 文件无效",
|
|
182
182
|
"show_errors": "显示错误"
|
|
183
183
|
},
|
|
184
|
-
"content_type_article": "
|
|
185
|
-
"content_type_video": "
|
|
186
|
-
"content_type_podcast": "
|
|
187
|
-
"content_type_scorm": "
|
|
188
|
-
"content_type_course": "
|
|
184
|
+
"content_type_article": "文章",
|
|
185
|
+
"content_type_video": "视频",
|
|
186
|
+
"content_type_podcast": "播客",
|
|
187
|
+
"content_type_scorm": "动画资源",
|
|
188
|
+
"content_type_course": "课程",
|
|
189
189
|
"review_this_skill": "回顾此技能",
|
|
190
190
|
"review_skill_empty": "您还没有要复习的技能",
|
|
191
191
|
"review_skill_empty_description": "首先您需要完成课程然后才能复习不同的技能。",
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
},
|
|
204
204
|
"esante-formation": {
|
|
205
205
|
"diploma": "Learning path",
|
|
206
|
-
"rewards": "
|
|
206
|
+
"rewards": "证明"
|
|
207
207
|
},
|
|
208
208
|
"ehc-vd": {
|
|
209
209
|
"diploma": "certificate"
|
|
@@ -181,11 +181,11 @@
|
|
|
181
181
|
"invalid_scorm": "scorm 檔無效",
|
|
182
182
|
"show_errors": "顯示錯誤"
|
|
183
183
|
},
|
|
184
|
-
"content_type_article": "
|
|
185
|
-
"content_type_video": "
|
|
184
|
+
"content_type_article": "文章",
|
|
185
|
+
"content_type_video": "影片",
|
|
186
186
|
"content_type_podcast": "Podcast",
|
|
187
|
-
"content_type_scorm": "
|
|
188
|
-
"content_type_course": "
|
|
187
|
+
"content_type_scorm": "動畫資源",
|
|
188
|
+
"content_type_course": "課程",
|
|
189
189
|
"review_this_skill": "複習一下這個技能",
|
|
190
190
|
"review_skill_empty": "目前還沒有可修改的技能",
|
|
191
191
|
"review_skill_empty_description": "在複習不同技能以前,必須先完成課程。",
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
},
|
|
204
204
|
"esante-formation": {
|
|
205
205
|
"diploma": "Learning path",
|
|
206
|
-
"rewards": "
|
|
206
|
+
"rewards": "證明"
|
|
207
207
|
},
|
|
208
208
|
"ehc-vd": {
|
|
209
209
|
"diploma": "certificate"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@coorpacademy/components",
|
|
3
|
-
"version": "11.40.
|
|
3
|
+
"version": "11.40.4-alpha.44+a7bfe2591",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "es/index.js",
|
|
@@ -166,5 +166,5 @@
|
|
|
166
166
|
"last 2 versions",
|
|
167
167
|
"IE 11"
|
|
168
168
|
],
|
|
169
|
-
"gitHead": "
|
|
169
|
+
"gitHead": "a7bfe259118576b32a40abb93890fa456b37043d"
|
|
170
170
|
}
|