@orbe-agro/client-core 5.6.188 → 5.6.192
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/dist/@ecme/assets/styles/app.css +17 -0
- package/dist/@ecme/assets/styles/tailwind/index.css +17 -0
- package/dist/@ecme/components/layouts/PostLoginLayout/components/CollapsibleSide.stories.js.map +1 -1
- package/dist/@ecme/components/layouts/PostLoginLayout/components/ContentOverlay.stories.js.map +1 -1
- package/dist/@ecme/components/layouts/PostLoginLayout/components/FrameLessSide.stories.js.map +1 -1
- package/dist/@ecme/components/layouts/PostLoginLayout/components/StackedSide.stories.js.map +1 -1
- package/dist/@ecme/components/layouts/PostLoginLayout/components/TopBarClassic.stories.js.map +1 -1
- package/dist/@ecme/components/template/Footer.js +1 -1
- package/dist/@ecme/components/template/Header.stories.js.map +1 -1
- package/dist/@ecme/components/template/Search.js +276 -72
- package/dist/@ecme/components/template/Search.js.map +1 -1
- package/dist/@ecme/components/template/Search.stories.js +18 -2
- package/dist/@ecme/components/template/Search.stories.js.map +1 -1
- package/dist/@ecme/index.js +0 -3
- package/dist/@ecme/index.js.map +1 -1
- package/dist/@ecme/locales/index.js +1 -4
- package/dist/@ecme/locales/index.js.map +1 -1
- package/dist/@ecme/mock/data/favoritosMenuData.js +5 -0
- package/dist/@ecme/mock/data/favoritosMenuData.js.map +1 -0
- package/dist/@ecme/mock/fakeApi/favoritosMenuFakeApi.js +64 -0
- package/dist/@ecme/mock/fakeApi/favoritosMenuFakeApi.js.map +1 -0
- package/dist/@ecme/mock/index.js +1 -0
- package/dist/@ecme/mock/index.js.map +1 -1
- package/dist/@types/@ecme/components/layouts/PostLoginLayout/components/CollapsibleSide.stories.d.ts +7 -0
- package/dist/@types/@ecme/components/layouts/PostLoginLayout/components/CollapsibleSide.stories.d.ts.map +1 -0
- package/dist/@types/@ecme/components/layouts/PostLoginLayout/components/ContentOverlay.stories.d.ts +7 -0
- package/dist/@types/@ecme/components/layouts/PostLoginLayout/components/ContentOverlay.stories.d.ts.map +1 -0
- package/dist/@types/@ecme/components/layouts/PostLoginLayout/components/FrameLessSide.stories.d.ts +7 -0
- package/dist/@types/@ecme/components/layouts/PostLoginLayout/components/FrameLessSide.stories.d.ts.map +1 -0
- package/dist/@types/@ecme/components/layouts/PostLoginLayout/components/StackedSide.stories.d.ts +7 -0
- package/dist/@types/@ecme/components/layouts/PostLoginLayout/components/StackedSide.stories.d.ts.map +1 -0
- package/dist/@types/@ecme/components/layouts/PostLoginLayout/components/TopBarClassic.stories.d.ts +7 -0
- package/dist/@types/@ecme/components/layouts/PostLoginLayout/components/TopBarClassic.stories.d.ts.map +1 -0
- package/dist/@types/@ecme/components/template/Header.stories.d.ts +7 -0
- package/dist/@types/@ecme/components/template/Header.stories.d.ts.map +1 -0
- package/dist/@types/@ecme/components/template/Search.d.ts.map +1 -1
- package/dist/@types/@ecme/components/template/Search.stories.d.ts +9 -0
- package/dist/@types/@ecme/components/template/Search.stories.d.ts.map +1 -0
- package/dist/@types/@ecme/locales/index.d.ts +0 -1
- package/dist/@types/@ecme/locales/index.d.ts.map +1 -1
- package/dist/@types/@ecme/mock/data/favoritosMenuData.d.ts +3 -0
- package/dist/@types/@ecme/mock/data/favoritosMenuData.d.ts.map +1 -0
- package/dist/@types/@ecme/mock/fakeApi/favoritosMenuFakeApi.d.ts +2 -0
- package/dist/@types/@ecme/mock/fakeApi/favoritosMenuFakeApi.d.ts.map +1 -0
- package/dist/@types/@ecme/mock/index.d.ts +1 -0
- package/dist/@types/@ecme/mock/index.d.ts.map +1 -1
- package/dist/@types/base/@types/api/request/dm/TCreateFavoritoMenuRequest.d.ts +4 -0
- package/dist/@types/base/@types/api/request/dm/TCreateFavoritoMenuRequest.d.ts.map +1 -0
- package/dist/@types/base/@types/api/request/dm/TReorderFavoritosMenuRequest.d.ts +4 -0
- package/dist/@types/base/@types/api/request/dm/TReorderFavoritosMenuRequest.d.ts.map +1 -0
- package/dist/@types/base/@types/api/response/dadosMestres/TFavoritoMenuResponse.d.ts +8 -0
- package/dist/@types/base/@types/api/response/dadosMestres/TFavoritoMenuResponse.d.ts.map +1 -0
- package/dist/@types/base/@types/models/performance/ppr.d.ts +48 -0
- package/dist/@types/base/@types/models/performance/ppr.d.ts.map +1 -1
- package/dist/@types/base/configs/endpoints.config/DadosMestres/FavoritoMenu/favoritoMenu.endpoint.config.d.ts +8 -0
- package/dist/@types/base/configs/endpoints.config/DadosMestres/FavoritoMenu/favoritoMenu.endpoint.config.d.ts.map +1 -0
- package/dist/@types/base/configs/endpoints.config/endpoints.navigation.d.ts +7 -0
- package/dist/@types/base/configs/endpoints.config/endpoints.navigation.d.ts.map +1 -1
- package/dist/@types/base/configs/endpoints.config/performance/config/ppr.d.ts +1 -0
- package/dist/@types/base/configs/endpoints.config/performance/config/ppr.d.ts.map +1 -1
- package/dist/@types/base/configs/endpoints.config/performance/performance.d.ts +1 -0
- package/dist/@types/base/configs/endpoints.config/performance/performance.d.ts.map +1 -1
- package/dist/@types/base/services/modules/DadosMestres/FavoritoMenu/FavoritoMenuService.d.ts +8 -0
- package/dist/@types/base/services/modules/DadosMestres/FavoritoMenu/FavoritoMenuService.d.ts.map +1 -0
- package/dist/@types/base/services/modules/performance/PerformanceService.d.ts +3 -1
- package/dist/@types/base/services/modules/performance/PerformanceService.d.ts.map +1 -1
- package/dist/@types/base/utils/functions/stringUtils.d.ts.map +1 -1
- package/dist/base/@types/api/request/dm/TCreateFavoritoMenuRequest.js +2 -0
- package/dist/base/@types/api/request/dm/TCreateFavoritoMenuRequest.js.map +1 -0
- package/dist/base/@types/api/request/dm/TReorderFavoritosMenuRequest.js +2 -0
- package/dist/base/@types/api/request/dm/TReorderFavoritosMenuRequest.js.map +1 -0
- package/dist/base/@types/api/response/dadosMestres/TFavoritoMenuResponse.js +2 -0
- package/dist/base/@types/api/response/dadosMestres/TFavoritoMenuResponse.js.map +1 -0
- package/dist/base/assets/styles/init.css +18 -0
- package/dist/base/configs/api.config.js.map +1 -1
- package/dist/base/configs/endpoints.config/DadosMestres/FavoritoMenu/favoritoMenu.endpoint.config.js +11 -0
- package/dist/base/configs/endpoints.config/DadosMestres/FavoritoMenu/favoritoMenu.endpoint.config.js.map +1 -0
- package/dist/base/configs/endpoints.config/endpoints.navigation.js +2 -0
- package/dist/base/configs/endpoints.config/endpoints.navigation.js.map +1 -1
- package/dist/base/configs/endpoints.config/performance/config/ppr.js +2 -1
- package/dist/base/configs/endpoints.config/performance/config/ppr.js.map +1 -1
- package/dist/base/configs/navigation.config/submenu/performance/config/exportarResultadosPpr.submenu.js +1 -1
- package/dist/base/configs/navigation.config/submenu/performance/config/exportarResultadosPpr.submenu.js.map +1 -1
- package/dist/base/index.js +3 -1
- package/dist/base/services/index.js +3 -1
- package/dist/base/services/modules/DadosMestres/FavoritoMenu/FavoritoMenuService.js +35 -0
- package/dist/base/services/modules/DadosMestres/FavoritoMenu/FavoritoMenuService.js.map +1 -0
- package/dist/base/services/modules/index.js +3 -1
- package/dist/base/services/modules/performance/PerformanceService.js +15 -0
- package/dist/base/services/modules/performance/PerformanceService.js.map +1 -1
- package/dist/base/services/modules/performance/index.js +3 -1
- package/dist/base/utils/functions/stringUtils.js +2 -0
- package/dist/base/utils/functions/stringUtils.js.map +1 -1
- package/lib/@ecme/components/layouts/PostLoginLayout/components/CollapsibleSide.stories.tsx +2 -2
- package/lib/@ecme/components/layouts/PostLoginLayout/components/ContentOverlay.stories.tsx +2 -2
- package/lib/@ecme/components/layouts/PostLoginLayout/components/FrameLessSide.stories.tsx +2 -2
- package/lib/@ecme/components/layouts/PostLoginLayout/components/StackedSide.stories.tsx +2 -2
- package/lib/@ecme/components/layouts/PostLoginLayout/components/TopBarClassic.stories.tsx +2 -2
- package/lib/@ecme/components/template/Header.stories.tsx +2 -2
- package/lib/@ecme/components/template/Search.stories.tsx +23 -5
- package/lib/@ecme/components/template/Search.tsx +366 -83
- package/lib/@ecme/locales/index.ts +0 -4
- package/lib/@ecme/mock/data/favoritosMenuData.ts +3 -0
- package/lib/@ecme/mock/fakeApi/favoritosMenuFakeApi.ts +87 -0
- package/lib/@ecme/mock/index.ts +1 -0
- package/lib/base/@types/api/request/dm/TCreateFavoritoMenuRequest.ts +3 -0
- package/lib/base/@types/api/request/dm/TReorderFavoritosMenuRequest.ts +3 -0
- package/lib/base/@types/api/response/dadosMestres/TFavoritoMenuResponse.ts +7 -0
- package/lib/base/@types/models/performance/ppr.ts +67 -0
- package/lib/base/configs/api.config.ts +2 -2
- package/lib/base/configs/endpoints.config/DadosMestres/FavoritoMenu/favoritoMenu.endpoint.config.ts +10 -0
- package/lib/base/configs/endpoints.config/endpoints.navigation.ts +2 -0
- package/lib/base/configs/endpoints.config/performance/config/ppr.ts +1 -0
- package/lib/base/configs/navigation.config/submenu/performance/config/exportarResultadosPpr.submenu.ts +1 -1
- package/lib/base/services/modules/DadosMestres/FavoritoMenu/FavoritoMenuService.ts +35 -0
- package/lib/base/services/modules/performance/PerformanceService.ts +16 -0
- package/lib/base/utils/functions/stringUtils.ts +2 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Search.js","sources":["../../../../lib/@ecme/components/template/Search.tsx"],"sourcesContent":["import { NavigationTree } from '@/@types/navigation'\nimport Button from '@/components/ui/Button'\nimport Dialog from '@/components/ui/Dialog'\nimport ScrollBar from '@/components/ui/ScrollBar'\nimport navigationConfig from '@/configs/navigation.config'\nimport { NAV_ITEM_TYPE_ITEM } from '@/constants/navigation.constant'\nimport { useSessionUser } from '@/store/authStore'\nimport classNames from '@/utils/classNames'\nimport withHeaderItem from '@/utils/hoc/withHeaderItem'\nimport debounce from 'lodash/debounce'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport Highlighter from 'react-highlight-words'\nimport { useTranslation } from 'react-i18next'\nimport { HiChevronRight, HiOutlineSearch } from 'react-icons/hi'\nimport { PiMagnifyingGlassDuotone } from 'react-icons/pi'\nimport { Link } from 'react-router-dom'\nimport { Spinner } from '../ui'\n\ntype SearchData = {\n key: string\n path: string\n title: string\n icon: string\n category: string\n categoryTitle: string\n breadcrumbs: string[]\n}\n\ntype SearchResult = {\n title: string\n data: SearchData[]\n}\n\nconst filterNavigationByAuthority = (\n navTree: NavigationTree[],\n userAuthority: string[],\n): NavigationTree[] => {\n return navTree.reduce((acc: NavigationTree[], nav) => {\n if (nav.excludeWhenHasPaths && nav.excludeWhenHasPaths.length > 0) {\n const shouldExclude = nav.excludeWhenHasPaths.some((path) =>\n userAuthority.includes(path),\n )\n\n if (shouldExclude) {\n return acc\n }\n }\n\n if (nav.subMenu && nav.subMenu.length > 0) {\n const filteredSubMenu = filterNavigationByAuthority(\n nav.subMenu,\n userAuthority,\n )\n\n if (filteredSubMenu.length > 0) {\n acc.push({ ...nav, subMenu: filteredSubMenu })\n }\n } else if ((nav.path && userAuthority.includes(nav.path)) || !nav.path) {\n acc.push(nav)\n }\n\n return acc\n }, [])\n}\n\nconst ListItem = (props: {\n icon: string\n label: string\n url: string\n isLast?: boolean\n keyWord: string\n breadcrumbs: string[]\n onNavigate: () => void\n}) => {\n const { icon, label, url = '', keyWord, onNavigate, breadcrumbs } = props\n\n const makeBreadcrumbs = (breadcrumbs: string[]) => {\n return breadcrumbs.join(' / ')\n }\n\n return (\n <Link to={url} onClick={onNavigate}>\n <div\n className={classNames(\n 'flex items-center justify-between rounded-xl p-3 cursor-pointer user-select',\n 'hover:bg-gray-100 dark:hover:bg-gray-700',\n )}\n >\n <div className=\"flex items-center gap-2\">\n {/* <div\n className={classNames(\n 'rounded-lg border-2 border-gray-200 shadow-sm text-xl group-hover:shadow h-10 w-10 flex items-center justify-center bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100',\n )}\n >\n {icon && navigationIcon[icon]}\n </div> */}\n <div className=\"text-gray-900 dark:text-gray-300\">\n <Highlighter\n autoEscape\n highlightClassName={classNames(\n 'text-primary',\n 'underline bg-transparent font-semibold dark:text-white',\n )}\n searchWords={[keyWord]}\n textToHighlight={makeBreadcrumbs(breadcrumbs)}\n />\n </div>\n </div>\n <HiChevronRight className=\"text-lg\" />\n </div>\n </Link>\n )\n}\n\ntype NavigationTreeFlat = NavigationTree & { parents: string[] }\n\nconst _Search = ({ className }: { className?: string }) => {\n const [loading, setLoading] = useState(false)\n const [searchDialogOpen, setSearchDialogOpen] = useState(false)\n const [searchResult, setSearchResult] = useState<SearchResult[]>([])\n const [noResult, setNoResult] = useState(false)\n const userAuthority = useSessionUser((state) => state.user.authority)\n\n const inputRef = useRef<HTMLInputElement>(null)\n\n const handleReset = () => {\n setNoResult(false)\n setSearchResult([])\n }\n\n const handleSearchOpen = () => {\n setSearchDialogOpen(true)\n }\n\n const handleSearchClose = () => {\n setSearchDialogOpen(false)\n handleReset()\n }\n\n const debounceFn = debounce(handleDebounceFn, 750)\n\n const { t } = useTranslation()\n\n const flatNavTree = useMemo(() => {\n const arr: NavigationTreeFlat[] = []\n const filteredNavigationTree = filterNavigationByAuthority(\n navigationConfig,\n userAuthority || [],\n )\n\n const makeflat = (item: NavigationTree, parents: string[]) => {\n if (Array.isArray(item.subMenu) && item.subMenu.length > 0) {\n item.subMenu.forEach((item) =>\n makeflat(item, [...parents, t(item.translateKey)]),\n )\n }\n arr.push({ ...item, parents })\n }\n\n filteredNavigationTree.forEach(function f(item) {\n makeflat(item, [t(item.translateKey)])\n })\n\n return arr\n }, [userAuthority, t])\n\n const filterNavigationTreeFlat = (\n text: string,\n tree: NavigationTreeFlat[],\n ): NavigationTreeFlat[] => {\n const results = tree.filter(\n (item) =>\n item.type === NAV_ITEM_TYPE_ITEM &&\n item.parents.join().toUpperCase().includes(text.toUpperCase()),\n )\n\n return results\n }\n\n function navTreeFlatToSearchResult(\n tree: NavigationTreeFlat[],\n ): SearchResult[] {\n const navTreeSearchResult: SearchResult = {\n title: t('base.layout.search.results.navTree'),\n data: [],\n }\n tree.forEach((item) => {\n navTreeSearchResult.data.push({\n category: item.path,\n categoryTitle: item.title,\n icon: item.icon,\n key: item.key,\n path: item.path,\n title: t(item.translateKey, item.title),\n breadcrumbs: item.parents,\n })\n })\n return [navTreeSearchResult]\n }\n\n async function handleDebounceFn(query: string) {\n if (!query) {\n setLoading(false)\n setSearchResult([])\n return\n }\n\n if (noResult) {\n setNoResult(false)\n }\n\n const res = await filterNavigationTreeFlat(query, flatNavTree)\n\n if (res) {\n if (res.length === 0) {\n setNoResult(true)\n setSearchResult([])\n } else {\n setSearchResult(navTreeFlatToSearchResult(res))\n }\n }\n\n setLoading(false)\n }\n\n const handleSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\n setLoading(true)\n debounceFn(e.target.value)\n }\n\n useEffect(() => {\n if (searchDialogOpen) {\n const timeout = setTimeout(() => inputRef.current?.focus(), 100)\n return () => {\n clearTimeout(timeout)\n }\n }\n }, [searchDialogOpen])\n\n const handleNavigate = () => {\n handleSearchClose()\n }\n\n return (\n <>\n <div\n className={classNames(className, 'text-2xl')}\n onClick={handleSearchOpen}\n >\n <PiMagnifyingGlassDuotone />\n </div>\n <Dialog\n contentClassName=\"p-0\"\n isOpen={searchDialogOpen}\n closable={false}\n onRequestClose={handleSearchClose}\n >\n <div>\n <div className=\"flex items-center justify-between border-b border-gray-200 px-4 dark:border-gray-600\">\n <div className=\"flex items-center\">\n <HiOutlineSearch className=\"text-xl\" />\n <input\n ref={inputRef}\n className=\"block w-full bg-transparent p-4 text-base text-gray-900 outline-none ring-0 dark:text-gray-100\"\n placeholder={t('common.input.placeholder.search')}\n onChange={handleSearch}\n />\n </div>\n <Button size=\"xs\" onClick={handleSearchClose}>\n Esc\n </Button>\n </div>\n <div className=\"px-5 py-6\">\n {loading ? (\n <div\n className={classNames(\n 'flex items-center justify-center',\n )}\n >\n <Spinner size={40} />\n </div>\n ) : (\n <>\n <ScrollBar className=\"max-h-[350px] overflow-y-auto\">\n {searchResult.map((result) => (\n <div\n key={result.title}\n className=\"mb-4\"\n >\n <h6 className=\"mb-3\">\n {result.title}\n </h6>\n {result.data.map((data, index) => (\n <ListItem\n key={data.title + index}\n icon={data.icon}\n breadcrumbs={\n data.breadcrumbs\n }\n label={data.title}\n url={data.path}\n keyWord={\n inputRef.current\n ?.value || ''\n }\n onNavigate={handleNavigate}\n />\n ))}\n </div>\n ))}\n {searchResult.length === 0 && noResult && (\n <div className=\"my-10 text-center text-lg\">\n <span className=\"pr-1\">\n {t(\n 'common.status.noResultsFor',\n )}\n </span>\n <span className=\"heading-text\">\n {`'`}\n {inputRef.current?.value}\n {`'`}\n </span>\n </div>\n )}\n </ScrollBar>\n </>\n )}\n </div>\n </div>\n </Dialog>\n </>\n )\n}\n\nconst Search = withHeaderItem(_Search)\n\nexport default Search\n"],"names":["breadcrumbs","item"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Search.js","sources":["../../../../lib/@ecme/components/template/Search.tsx"],"sourcesContent":["import { NavigationTree } from '@/@types/navigation'\nimport Button from '@/components/ui/Button'\nimport Dialog from '@/components/ui/Dialog'\nimport ScrollBar from '@/components/ui/ScrollBar'\nimport navigationConfig from '@/configs/navigation.config'\nimport { NAV_ITEM_TYPE_ITEM } from '@/constants/navigation.constant'\nimport { useSessionUser } from '@/store/authStore'\nimport classNames from '@/utils/classNames'\nimport withHeaderItem from '@/utils/hoc/withHeaderItem'\nimport debounce from 'lodash/debounce'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport Highlighter from 'react-highlight-words'\nimport { useTranslation } from 'react-i18next'\nimport {\n HiChevronRight,\n HiOutlineSearch,\n HiOutlineStar,\n HiStar,\n HiOutlineTrash,\n} from 'react-icons/hi'\nimport { PiMagnifyingGlassDuotone } from 'react-icons/pi'\nimport { Link } from 'react-router-dom'\nimport { Spinner } from '../ui'\nimport Notification from '@/components/ui/Notification'\nimport toast from '@/components/ui/toast'\nimport {\n apiFindFavoritosByUsuario,\n apiDeleteFavoritoMenu,\n apiCreateFavoritoMenu,\n} from '@base/services/modules/DadosMestres/FavoritoMenu/FavoritoMenuService'\nimport { TFavoritoMenuResponse } from '@base/@types/api/response/dadosMestres/TFavoritoMenuResponse'\n\ntype SearchData = {\n key: string\n path: string\n title: string\n icon: string\n category: string\n categoryTitle: string\n breadcrumbs: string[]\n}\n\ntype SearchResult = {\n title: string\n data: SearchData[]\n}\n\nconst filterNavigationByAuthority = (\n navTree: NavigationTree[],\n userAuthority: string[],\n): NavigationTree[] => {\n return navTree.reduce((acc: NavigationTree[], nav) => {\n if (nav.excludeWhenHasPaths && nav.excludeWhenHasPaths.length > 0) {\n const shouldExclude = nav.excludeWhenHasPaths.some((path) =>\n userAuthority.includes(path),\n )\n\n if (shouldExclude) {\n return acc\n }\n }\n\n if (nav.subMenu && nav.subMenu.length > 0) {\n const filteredSubMenu = filterNavigationByAuthority(\n nav.subMenu,\n userAuthority,\n )\n\n if (filteredSubMenu.length > 0) {\n acc.push({ ...nav, subMenu: filteredSubMenu })\n }\n } else if (\n (nav.path && userAuthority.includes(nav.path)) ||\n !nav.path\n ) {\n acc.push(nav)\n }\n\n return acc\n }, [])\n}\n\nconst ListItem = (props: {\n icon: string\n label: string\n url: string\n isLast?: boolean\n keyWord: string\n breadcrumbs: string[]\n onNavigate: () => void\n menuKey: string\n isFavorited: boolean\n favToggling: boolean\n onToggleFavorite: (menuKey: string) => void\n}) => {\n const {\n icon,\n label,\n url = '',\n keyWord,\n onNavigate,\n breadcrumbs,\n menuKey,\n isFavorited,\n favToggling,\n onToggleFavorite,\n } = props\n\n const makeBreadcrumbs = (breadcrumbs: string[]) => {\n return breadcrumbs.join(' / ')\n }\n\n return (\n <div className=\"flex items-center gap-1 pr-4\">\n <Link to={url} onClick={onNavigate} className=\"flex-1\">\n <div\n className={classNames(\n 'flex items-center justify-between rounded-xl p-3 cursor-pointer user-select',\n 'hover:bg-gray-100 dark:hover:bg-gray-700',\n )}\n >\n <div className=\"w-72\">\n <div className=\"overflow-hidden text-gray-900 dark:text-gray-300\">\n <Highlighter\n autoEscape\n highlightClassName={classNames(\n 'text-primary',\n 'underline bg-transparent font-semibold dark:text-white',\n )}\n searchWords={[keyWord]}\n textToHighlight={makeBreadcrumbs(breadcrumbs)}\n />\n </div>\n </div>\n <HiChevronRight className=\"shrink-0 text-lg\" />\n </div>\n </Link>\n\n <button\n type=\"button\"\n className=\"flex-shrink-0 rounded-lg p-2 text-lg transition-colors hover:bg-gray-100 dark:hover:bg-gray-700\"\n disabled={favToggling}\n onClick={(e) => {\n e.preventDefault()\n e.stopPropagation()\n onToggleFavorite(menuKey)\n }}\n >\n {favToggling ? (\n <Spinner size={18} />\n ) : isFavorited ? (\n <HiStar className=\"text-yellow-500\" />\n ) : (\n <HiOutlineStar className=\"text-gray-400 hover:text-yellow-500\" />\n )}\n </button>\n </div>\n )\n}\n\ntype NavigationTreeFlat = NavigationTree & { parents: string[] }\n\ntype NavItemInfo = {\n key: string\n path: string\n title: string\n}\n\nconst flattenNavTree = (\n navTree: NavigationTree[],\n): Map<string, NavItemInfo> => {\n const map = new Map<string, NavItemInfo>()\n\n const walk = (items: NavigationTree[]) => {\n for (const item of items) {\n if (item.type === NAV_ITEM_TYPE_ITEM && item.path) {\n map.set(item.key, {\n key: item.key,\n path: item.path,\n title: item.title,\n })\n }\n if (item.subMenu && item.subMenu.length > 0) {\n walk(item.subMenu)\n }\n }\n }\n\n walk(navTree)\n return map\n}\n\nconst navItemMap = flattenNavTree(navigationConfig)\n\nconst _Search = ({ className }: { className?: string }) => {\n const [loading, setLoading] = useState(false)\n const [searchDialogOpen, setSearchDialogOpen] = useState(false)\n const [searchResult, setSearchResult] = useState<SearchResult[]>([])\n const [noResult, setNoResult] = useState(false)\n const userAuthority = useSessionUser((state) => state.user.authority)\n\n // -- Favorites state --\n const [favDialogOpen, setFavDialogOpen] = useState(false)\n const [favLoading, setFavLoading] = useState(false)\n const [favorites, setFavorites] = useState<TFavoritoMenuResponse[]>([])\n const [removingId, setRemovingId] = useState<number | null>(null)\n const [favoritedKeys, setFavoritedKeys] = useState<Set<string>>(new Set())\n const [togglingKeys, setTogglingKeys] = useState<Set<string>>(new Set())\n const userId = useSessionUser((state) => state.user.userId)\n\n const loadFavorites = async () => {\n if (!userId) return\n setFavLoading(true)\n try {\n const data = await apiFindFavoritosByUsuario(Number(userId))\n setFavorites(data)\n setFavoritedKeys(new Set(data.map((f) => f.menuKey)))\n } catch {\n toast.push(\n <Notification title=\"Erro\" type=\"danger\">\n Falha ao carregar favoritos.\n </Notification>,\n )\n setFavorites([])\n setFavoritedKeys(new Set())\n } finally {\n setFavLoading(false)\n }\n }\n\n const handleFavRemove = async (id: number) => {\n setRemovingId(id)\n try {\n await apiDeleteFavoritoMenu(id)\n setFavorites((prev) => prev.filter((f) => f.id !== id))\n setFavoritedKeys((prev) => {\n const next = new Set(prev)\n const removed = favorites.find((f) => f.id === id)\n if (removed) next.delete(removed.menuKey)\n return next\n })\n } catch {\n toast.push(\n <Notification title=\"Erro\" type=\"danger\">\n Falha ao remover favorito.\n </Notification>,\n )\n } finally {\n setRemovingId(null)\n }\n }\n\n const handleFavToggle = async (menuKey: string) => {\n if (!userId || togglingKeys.has(menuKey)) return\n setTogglingKeys((prev) => new Set(prev).add(menuKey))\n try {\n if (favoritedKeys.has(menuKey)) {\n const fav = favorites.find((f) => f.menuKey === menuKey)\n if (fav) {\n await apiDeleteFavoritoMenu(fav.id)\n setFavorites((prev) => prev.filter((f) => f.id !== fav.id))\n setFavoritedKeys((prev) => {\n const next = new Set(prev)\n next.delete(menuKey)\n return next\n })\n }\n } else {\n const created = await apiCreateFavoritoMenu({ menuKey })\n setFavorites((prev) => [...prev, created])\n setFavoritedKeys((prev) => new Set(prev).add(menuKey))\n }\n } catch {\n toast.push(\n <Notification title=\"Erro\" type=\"danger\">\n {favoritedKeys.has(menuKey)\n ? 'Falha ao remover favorito.'\n : 'Falha ao adicionar favorito.'}\n </Notification>,\n )\n } finally {\n setTogglingKeys((prev) => {\n const next = new Set(prev)\n next.delete(menuKey)\n return next\n })\n }\n }\n\n const handleFavOpen = () => {\n setFavDialogOpen(true)\n }\n\n const handleFavClose = () => {\n setFavDialogOpen(false)\n }\n\n useEffect(() => {\n if (favDialogOpen) {\n loadFavorites()\n }\n }, [favDialogOpen, userId])\n\n // Also load favorites when search opens (for star toggles in results)\n useEffect(() => {\n if (searchDialogOpen && userId) {\n loadFavorites()\n }\n }, [searchDialogOpen, userId])\n\n const enrichedFavorites = useMemo(() => {\n return favorites.map((fav) => ({\n ...fav,\n navInfo: navItemMap.get(fav.menuKey),\n }))\n }, [favorites])\n\n // -- end favorites state --\n\n const inputRef = useRef<HTMLInputElement>(null)\n\n const handleReset = () => {\n setNoResult(false)\n setSearchResult([])\n }\n\n const handleSearchOpen = () => {\n setSearchDialogOpen(true)\n }\n\n const handleSearchClose = () => {\n setSearchDialogOpen(false)\n handleReset()\n }\n\n const debounceFn = debounce(handleDebounceFn, 750)\n\n const { t } = useTranslation()\n\n const flatNavTree = useMemo(() => {\n const arr: NavigationTreeFlat[] = []\n const filteredNavigationTree = filterNavigationByAuthority(\n navigationConfig,\n userAuthority || [],\n )\n\n const makeflat = (item: NavigationTree, parents: string[]) => {\n if (Array.isArray(item.subMenu) && item.subMenu.length > 0) {\n item.subMenu.forEach((item) =>\n makeflat(item, [...parents, t(item.translateKey)]),\n )\n }\n arr.push({ ...item, parents })\n }\n\n filteredNavigationTree.forEach(function f(item) {\n makeflat(item, [t(item.translateKey)])\n })\n\n return arr\n }, [userAuthority, t])\n\n const filterNavigationTreeFlat = (\n text: string,\n tree: NavigationTreeFlat[],\n ): NavigationTreeFlat[] => {\n const results = tree.filter(\n (item) =>\n item.type === NAV_ITEM_TYPE_ITEM &&\n item.parents.join().toUpperCase().includes(text.toUpperCase()),\n )\n\n return results\n }\n\n function navTreeFlatToSearchResult(\n tree: NavigationTreeFlat[],\n ): SearchResult[] {\n const navTreeSearchResult: SearchResult = {\n title: t('base.layout.search.results.navTree'),\n data: [],\n }\n tree.forEach((item) => {\n navTreeSearchResult.data.push({\n category: item.path,\n categoryTitle: item.title,\n icon: item.icon,\n key: item.key,\n path: item.path,\n title: t(item.translateKey, item.title),\n breadcrumbs: item.parents,\n })\n })\n return [navTreeSearchResult]\n }\n\n async function handleDebounceFn(query: string) {\n if (!query) {\n setLoading(false)\n setSearchResult([])\n return\n }\n\n if (noResult) {\n setNoResult(false)\n }\n\n const res = await filterNavigationTreeFlat(query, flatNavTree)\n\n if (res) {\n if (res.length === 0) {\n setNoResult(true)\n setSearchResult([])\n } else {\n setSearchResult(navTreeFlatToSearchResult(res))\n }\n }\n\n setLoading(false)\n }\n\n const handleSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\n setLoading(true)\n debounceFn(e.target.value)\n }\n\n useEffect(() => {\n if (searchDialogOpen) {\n const timeout = setTimeout(() => inputRef.current?.focus(), 100)\n return () => {\n clearTimeout(timeout)\n }\n }\n }, [searchDialogOpen])\n\n const handleNavigate = () => {\n handleSearchClose()\n }\n\n return (\n <>\n <div className=\"flex items-center gap-1\">\n <div\n className={classNames(className, 'text-2xl')}\n onClick={handleSearchOpen}\n >\n <PiMagnifyingGlassDuotone />\n </div>\n <div\n className={classNames(className, 'text-2xl')}\n onClick={handleFavOpen}\n >\n <HiOutlineStar />\n </div>\n </div>\n {/* Search dialog */}\n <Dialog\n contentClassName=\"p-0\"\n isOpen={searchDialogOpen}\n closable={false}\n onRequestClose={handleSearchClose}\n >\n <div>\n <div className=\"flex items-center justify-between border-b border-gray-200 px-4 dark:border-gray-600\">\n <div className=\"flex items-center\">\n <HiOutlineSearch className=\"text-xl\" />\n <input\n ref={inputRef}\n className=\"block w-full bg-transparent p-4 text-base text-gray-900 outline-none ring-0 dark:text-gray-100\"\n placeholder={t(\n 'common.input.placeholder.search',\n )}\n onChange={handleSearch}\n />\n </div>\n <Button size=\"xs\" onClick={handleSearchClose}>\n Esc\n </Button>\n </div>\n <div className=\"px-5 py-6\">\n {loading ? (\n <div className=\"flex items-center justify-center\">\n <Spinner size={40} />\n </div>\n ) : (\n <ScrollBar className=\"max-h-[350px] overflow-y-auto\">\n {searchResult.map((result) => (\n <div key={result.title} className=\"mb-4\">\n <h6 className=\"mb-3\">{result.title}</h6>\n {result.data.map((data, index) => (\n <ListItem\n key={data.title + index}\n icon={data.icon}\n breadcrumbs={data.breadcrumbs}\n label={data.title}\n url={data.path}\n keyWord={\n inputRef.current?.value ||\n ''\n }\n onNavigate={handleNavigate}\n menuKey={data.key}\n isFavorited={favoritedKeys.has(\n data.key,\n )}\n favToggling={togglingKeys.has(\n data.key,\n )}\n onToggleFavorite={\n handleFavToggle\n }\n />\n ))}\n </div>\n ))}\n {searchResult.length === 0 && noResult && (\n <div className=\"my-10 text-center text-lg\">\n <span className=\"pr-1\">\n {t('common.status.noResultsFor')}\n </span>\n <span className=\"heading-text\">\n {`'`}\n {inputRef.current?.value}\n {`'`}\n </span>\n </div>\n )}\n </ScrollBar>\n )}\n </div>\n </div>\n </Dialog>\n {/* Favorites dialog */}\n <Dialog\n contentClassName=\"p-0\"\n isOpen={favDialogOpen}\n closable={false}\n onRequestClose={handleFavClose}\n >\n <div>\n <div className=\"flex items-center justify-between border-b border-gray-200 px-4 py-4 dark:border-gray-600\">\n <div className=\"flex items-center gap-2\">\n <HiStar className=\"text-xl text-yellow-500\" />\n <h6 className=\"text-base font-semibold text-gray-900 dark:text-gray-100\">\n Favoritos\n </h6>\n </div>\n <Button size=\"xs\" onClick={handleFavClose}>\n Esc\n </Button>\n </div>\n <div className=\"px-5 py-6\">\n {favLoading ? (\n <div className=\"flex items-center justify-center py-10\">\n <Spinner size={40} />\n </div>\n ) : (\n <ScrollBar className=\"max-h-[350px] overflow-y-auto\">\n {enrichedFavorites.length === 0 ? (\n <div className=\"my-10 text-center text-lg text-gray-500\">\n Nenhum favorito salvo.\n </div>\n ) : (\n <div className=\"flex flex-col gap-1\">\n {enrichedFavorites.map((fav) => (\n <div\n key={fav.id}\n className=\"flex items-center gap-1 pr-4\"\n >\n <Link\n to={\n fav.navInfo?.path || '#'\n }\n className=\"flex-1\"\n onClick={handleFavClose}\n >\n <div className=\"user-select flex cursor-pointer items-center justify-between rounded-xl p-3 hover:bg-gray-100 dark:hover:bg-gray-700\">\n <div className=\"w-72\">\n <div className=\"overflow-hidden text-gray-900 dark:text-gray-300\">\n {fav.navInfo\n ?.title ||\n fav.menuKey}\n </div>\n </div>\n <HiChevronRight className=\"h-6 w-6 shrink-0\" />\n </div>\n </Link>\n <button\n type=\"button\"\n className=\"flex-shrink-0 rounded-lg p-2 text-lg text-gray-400 transition-colors hover:bg-gray-100 hover:text-red-500 dark:hover:bg-gray-700\"\n disabled={\n removingId === fav.id\n }\n onClick={(e) => {\n e.stopPropagation()\n handleFavRemove(fav.id)\n }}\n >\n {removingId === fav.id ? (\n <Spinner size={18} />\n ) : (\n <HiOutlineTrash />\n )}\n </button>\n </div>\n ))}\n </div>\n )}\n </ScrollBar>\n )}\n </div>\n </div>\n </Dialog>\n </>\n )\n}\n\nconst Search = withHeaderItem(_Search)\n\nexport default Search\n"],"names":["breadcrumbs","item"],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import { BrowserRouter } from "react-router-dom";
|
|
|
4
4
|
import navigationConfig from "../../configs/navigation.config/index.js";
|
|
5
5
|
import { useSessionUser } from "../../store/authStore.js";
|
|
6
6
|
import Search from "./Search.js";
|
|
7
|
+
import "../../mock/fakeApi/favoritosMenuFakeApi.js";
|
|
7
8
|
const collectAuthorityPaths = (navTree) => {
|
|
8
9
|
return navTree.reduce((acc, node) => {
|
|
9
10
|
if (node.path) {
|
|
@@ -16,7 +17,7 @@ const collectAuthorityPaths = (navTree) => {
|
|
|
16
17
|
}, []);
|
|
17
18
|
};
|
|
18
19
|
const allAuthority = Array.from(new Set(collectAuthorityPaths(navigationConfig)));
|
|
19
|
-
const
|
|
20
|
+
const WithSimulatedUser = ({
|
|
20
21
|
children
|
|
21
22
|
}) => {
|
|
22
23
|
useEffect(() => {
|
|
@@ -24,6 +25,8 @@ const WithSimulatedAuthorities = ({
|
|
|
24
25
|
useSessionUser.setState({
|
|
25
26
|
user: {
|
|
26
27
|
...previousUser,
|
|
28
|
+
userId: "1",
|
|
29
|
+
userName: "Demo User",
|
|
27
30
|
authority: allAuthority
|
|
28
31
|
}
|
|
29
32
|
});
|
|
@@ -41,7 +44,7 @@ const meta = {
|
|
|
41
44
|
},
|
|
42
45
|
tags: ["autodocs"],
|
|
43
46
|
decorators: [
|
|
44
|
-
(Story) => /* @__PURE__ */ jsx(BrowserRouter, { children: /* @__PURE__ */ jsx(
|
|
47
|
+
(Story) => /* @__PURE__ */ jsx(BrowserRouter, { children: /* @__PURE__ */ jsx(WithSimulatedUser, { children: /* @__PURE__ */ jsx(Story, {}) }) })
|
|
45
48
|
],
|
|
46
49
|
argTypes: {
|
|
47
50
|
className: {
|
|
@@ -54,8 +57,21 @@ const Default = {
|
|
|
54
57
|
className: ""
|
|
55
58
|
}
|
|
56
59
|
};
|
|
60
|
+
const FavoritesMenu = {
|
|
61
|
+
args: {
|
|
62
|
+
className: ""
|
|
63
|
+
},
|
|
64
|
+
parameters: {
|
|
65
|
+
docs: {
|
|
66
|
+
description: {
|
|
67
|
+
story: "Clique no ícone de estrela (★) para abrir o dialog de favoritos. Os favoritos são mockados: Gestão de Processos > Cadastros, Performance e Originação. Use a lupa para buscar menus e veja a estrela ao lado de cada resultado — itens já favoritados aparecem com ★ amarela; itens não favoritados com ☆ cinza. Clique na estrela para adicionar/remover."
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
};
|
|
57
72
|
export {
|
|
58
73
|
Default,
|
|
74
|
+
FavoritesMenu,
|
|
59
75
|
meta as default
|
|
60
76
|
};
|
|
61
77
|
//# sourceMappingURL=Search.stories.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Search.stories.js","sources":["../../../../lib/@ecme/components/template/Search.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from '@storybook/react'\nimport { useEffect } from 'react'\nimport { BrowserRouter } from 'react-router-dom'\nimport navigationConfig from '@/configs/navigation.config'\nimport type { NavigationTree } from '@/@types/navigation'\nimport { useSessionUser } from '@/store/authStore'\nimport Search from './Search'\n\nconst collectAuthorityPaths = (navTree: NavigationTree[]): string[] => {\n return navTree.reduce((acc: string[], node) => {\n if (node.path) {\n acc.push(node.path)\n }\n\n if (node.subMenu?.length) {\n acc.push(...collectAuthorityPaths(node.subMenu))\n }\n\n return acc\n }, [])\n}\n\nconst allAuthority = Array.from(new Set(collectAuthorityPaths(navigationConfig)))\n\nconst
|
|
1
|
+
{"version":3,"file":"Search.stories.js","sources":["../../../../lib/@ecme/components/template/Search.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from '@storybook/react'\nimport { useEffect } from 'react'\nimport { BrowserRouter } from 'react-router-dom'\nimport navigationConfig from '@/configs/navigation.config'\nimport type { NavigationTree } from '@/@types/navigation'\nimport { useSessionUser } from '@/store/authStore'\nimport Search from './Search'\n\n// Enable axios mock for favoritos-menu API\nimport '@/mock/fakeApi/favoritosMenuFakeApi'\n\nconst collectAuthorityPaths = (navTree: NavigationTree[]): string[] => {\n return navTree.reduce((acc: string[], node) => {\n if (node.path) {\n acc.push(node.path)\n }\n\n if (node.subMenu?.length) {\n acc.push(...collectAuthorityPaths(node.subMenu))\n }\n\n return acc\n }, [])\n}\n\nconst allAuthority = Array.from(new Set(collectAuthorityPaths(navigationConfig)))\n\nconst WithSimulatedUser = ({\n children,\n}: {\n children: React.ReactNode\n}) => {\n useEffect(() => {\n const previousUser = useSessionUser.getState().user\n\n useSessionUser.setState({\n user: {\n ...previousUser,\n userId: '1',\n userName: 'Demo User',\n authority: allAuthority,\n },\n })\n\n return () => {\n useSessionUser.setState({ user: previousUser })\n }\n }, [])\n\n return <>{children}</>\n}\n\nconst meta: Meta<typeof Search> = {\n title: '@ecme/Template/Search',\n component: Search,\n parameters: {\n layout: 'padded',\n },\n tags: ['autodocs'],\n decorators: [\n (Story) => (\n <BrowserRouter>\n <WithSimulatedUser>\n <Story />\n </WithSimulatedUser>\n </BrowserRouter>\n ),\n ],\n argTypes: {\n className: {\n control: 'text',\n },\n },\n}\n\nexport default meta\n\ntype TStory = StoryObj<typeof meta>\n\nexport const Default: TStory = {\n args: {\n className: '',\n },\n}\n\nexport const FavoritesMenu: TStory = {\n args: {\n className: '',\n },\n parameters: {\n docs: {\n description: {\n story: 'Clique no ícone de estrela (★) para abrir o dialog de favoritos. Os favoritos são mockados: Gestão de Processos > Cadastros, Performance e Originação. Use a lupa para buscar menus e veja a estrela ao lado de cada resultado — itens já favoritados aparecem com ★ amarela; itens não favoritados com ☆ cinza. Clique na estrela para adicionar/remover.',\n },\n },\n },\n}\n"],"names":[],"mappings":";;;;;;;AAWA,MAAM,wBAAwB,CAAC,YAAwC;AACnE,SAAO,QAAQ,OAAO,CAAC,KAAe,SAAS;AAC3C,QAAI,KAAK,MAAM;AACX,UAAI,KAAK,KAAK,IAAI;AAAA,IACtB;AAEA,QAAI,KAAK,SAAS,QAAQ;AACtB,UAAI,KAAK,GAAG,sBAAsB,KAAK,OAAO,CAAC;AAAA,IACnD;AAEA,WAAO;AAAA,EACX,GAAG,CAAA,CAAE;AACT;AAEA,MAAM,eAAe,MAAM,KAAK,IAAI,IAAI,sBAAsB,gBAAgB,CAAC,CAAC;AAEhF,MAAM,oBAAoB,CAAC;AAAA,EACvB;AACJ,MAEM;AACF,YAAU,MAAM;AACZ,UAAM,eAAe,eAAe,SAAA,EAAW;AAE/C,mBAAe,SAAS;AAAA,MACpB,MAAM;AAAA,QACF,GAAG;AAAA,QACH,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,WAAW;AAAA,MAAA;AAAA,IACf,CACH;AAED,WAAO,MAAM;AACT,qBAAe,SAAS,EAAE,MAAM,aAAA,CAAc;AAAA,IAClD;AAAA,EACJ,GAAG,CAAA,CAAE;AAEL,yCAAU,UAAS;AACvB;AAEA,MAAM,OAA4B;AAAA,EAC9B,OAAO;AAAA,EACP,WAAW;AAAA,EACX,YAAY;AAAA,IACR,QAAQ;AAAA,EAAA;AAAA,EAEZ,MAAM,CAAC,UAAU;AAAA,EACjB,YAAY;AAAA,IACR,CAAC,UACG,oBAAC,eAAA,EACG,8BAAC,mBAAA,EACG,UAAA,oBAAC,OAAA,CAAA,CAAM,EAAA,CACX,EAAA,CACJ;AAAA,EAAA;AAAA,EAGR,UAAU;AAAA,IACN,WAAW;AAAA,MACP,SAAS;AAAA,IAAA;AAAA,EACb;AAER;AAMO,MAAM,UAAkB;AAAA,EAC3B,MAAM;AAAA,IACF,WAAW;AAAA,EAAA;AAEnB;AAEO,MAAM,gBAAwB;AAAA,EACjC,MAAM;AAAA,IACF,WAAW;AAAA,EAAA;AAAA,EAEf,YAAY;AAAA,IACR,MAAM;AAAA,MACF,aAAa;AAAA,QACT,OAAO;AAAA,MAAA;AAAA,IACX;AAAA,EACJ;AAER;"}
|
package/dist/@ecme/index.js
CHANGED
|
@@ -165,7 +165,6 @@ import { countryList } from "./constants/countries.constant.js";
|
|
|
165
165
|
import { dashboardsPlaceholder } from "./views/dashboards/index.js";
|
|
166
166
|
import { dateLocales } from "./locales/locales.js";
|
|
167
167
|
import { docsStyles } from "./assets/styles/docs/index.js";
|
|
168
|
-
import { ensureAppLocaleResourcesLoaded, initAllAppLocaleResources } from "./locales/initAll.js";
|
|
169
168
|
import { default as default109 } from "./utils/fileSizeUnit.js";
|
|
170
169
|
import { default as default110 } from "./configs/firebase.config.js";
|
|
171
170
|
import { guidePlaceholder } from "./views/guide/index.js";
|
|
@@ -440,12 +439,10 @@ export {
|
|
|
440
439
|
dashboardsPlaceholder,
|
|
441
440
|
dateLocales,
|
|
442
441
|
docsStyles,
|
|
443
|
-
ensureAppLocaleResourcesLoaded,
|
|
444
442
|
default109 as fileSizeUnit,
|
|
445
443
|
default110 as firebaseConfig,
|
|
446
444
|
guidePlaceholder,
|
|
447
445
|
default111 as hooks,
|
|
448
|
-
initAllAppLocaleResources,
|
|
449
446
|
default112 as isLastChild,
|
|
450
447
|
default113 as navigationIconConfig,
|
|
451
448
|
othersPlaceholder,
|
package/dist/@ecme/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import { dateLocales } from "./locales.js";
|
|
2
|
-
import { ensureAppLocaleResourcesLoaded, initAllAppLocaleResources } from "./initAll.js";
|
|
3
2
|
import i18n from "i18next";
|
|
4
3
|
import { default as default2 } from "i18next";
|
|
5
4
|
export {
|
|
6
5
|
dateLocales,
|
|
7
|
-
default2 as default
|
|
8
|
-
ensureAppLocaleResourcesLoaded,
|
|
9
|
-
initAllAppLocaleResources
|
|
6
|
+
default2 as default
|
|
10
7
|
};
|
|
11
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"favoritosMenuData.js","sources":["../../../../lib/@ecme/mock/data/favoritosMenuData.ts"],"sourcesContent":["import { TFavoritoMenuResponse } from '@base/@types/api/response/dadosMestres/TFavoritoMenuResponse'\n\nexport const favoritosMenuData: TFavoritoMenuResponse[] = []\n"],"names":[],"mappings":"AAEO,MAAM,oBAA6C,CAAA;"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { mock } from "../MockAdapter.js";
|
|
2
|
+
import { favoritosMenuData } from "../data/favoritosMenuData.js";
|
|
3
|
+
const BASE_URL = "/dados-mestres/api/favoritos-menu";
|
|
4
|
+
const randomDelay = () => 300 + Math.random() * 1200;
|
|
5
|
+
let favoritos = [...favoritosMenuData];
|
|
6
|
+
let nextId = favoritos.length + 1;
|
|
7
|
+
function withDelay(fn) {
|
|
8
|
+
return (config) => {
|
|
9
|
+
const { promise, resolve } = Promise.withResolvers();
|
|
10
|
+
setTimeout(() => resolve(fn(config)), randomDelay());
|
|
11
|
+
return promise;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
mock.onPost(BASE_URL).reply(withDelay((config) => {
|
|
15
|
+
const body = JSON.parse(config.data ?? "{}");
|
|
16
|
+
const menuKey = body.menuKey;
|
|
17
|
+
if (!menuKey) {
|
|
18
|
+
return [400, { status: 400, title: "Bad Request", detail: "menuKey is required" }];
|
|
19
|
+
}
|
|
20
|
+
const exists = favoritos.find((f) => f.menuKey === menuKey && f.ativo);
|
|
21
|
+
if (exists) {
|
|
22
|
+
return [400, { status: 400, title: "Bad Request", detail: "Menu already favorited" }];
|
|
23
|
+
}
|
|
24
|
+
const novo = {
|
|
25
|
+
id: nextId++,
|
|
26
|
+
usuarioId: 1,
|
|
27
|
+
menuKey,
|
|
28
|
+
ordem: favoritos.filter((f) => f.ativo).length,
|
|
29
|
+
ativo: true
|
|
30
|
+
};
|
|
31
|
+
favoritos.push(novo);
|
|
32
|
+
return [200, novo];
|
|
33
|
+
}));
|
|
34
|
+
mock.onGet(new RegExp(`${BASE_URL}/usuario/\\d+`)).reply(withDelay(() => {
|
|
35
|
+
const ativos = favoritos.filter((f) => f.ativo).sort((a, b) => a.ordem - b.ordem);
|
|
36
|
+
return [200, ativos];
|
|
37
|
+
}));
|
|
38
|
+
mock.onDelete(new RegExp(`${BASE_URL}/\\d+`)).reply(withDelay((config) => {
|
|
39
|
+
const id = Number(config.url?.split("/").pop());
|
|
40
|
+
const fav = favoritos.find((f) => f.id === id);
|
|
41
|
+
if (!fav || !fav.ativo) {
|
|
42
|
+
return [400, { status: 400, title: "Bad Request", detail: "Favorito not found" }];
|
|
43
|
+
}
|
|
44
|
+
fav.ativo = false;
|
|
45
|
+
return [204];
|
|
46
|
+
}));
|
|
47
|
+
mock.onPut(`${BASE_URL}/reorder`).reply(withDelay((config) => {
|
|
48
|
+
const body = JSON.parse(config.data ?? "{}");
|
|
49
|
+
const orderedIds = body.orderedIds;
|
|
50
|
+
if (!orderedIds || orderedIds.length === 0) {
|
|
51
|
+
return [400, { status: 400, title: "Bad Request", detail: "orderedIds is required" }];
|
|
52
|
+
}
|
|
53
|
+
const reordered = [];
|
|
54
|
+
for (let i = 0; i < orderedIds.length; i++) {
|
|
55
|
+
const fav = favoritos.find((f) => f.id === orderedIds[i] && f.ativo);
|
|
56
|
+
if (!fav) {
|
|
57
|
+
return [400, { status: 400, title: "Bad Request", detail: `Favorito ${orderedIds[i]} not found` }];
|
|
58
|
+
}
|
|
59
|
+
fav.ordem = i;
|
|
60
|
+
reordered.push(fav);
|
|
61
|
+
}
|
|
62
|
+
return [200, reordered];
|
|
63
|
+
}));
|
|
64
|
+
//# sourceMappingURL=favoritosMenuFakeApi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"favoritosMenuFakeApi.js","sources":["../../../../lib/@ecme/mock/fakeApi/favoritosMenuFakeApi.ts"],"sourcesContent":["import { mock } from '../MockAdapter'\nimport { favoritosMenuData } from '../data/favoritosMenuData'\nimport { TFavoritoMenuResponse } from '@base/@types/api/response/dadosMestres/TFavoritoMenuResponse'\n\nconst BASE_URL = '/dados-mestres/api/favoritos-menu'\n\nconst randomDelay = () => 300 + Math.random() * 1200 // 300-1500ms\n\ntype MockConfig = { data?: string; url?: string }\nlet favoritos: TFavoritoMenuResponse[] = [...favoritosMenuData]\nlet nextId = favoritos.length + 1\n\nfunction withDelay<T>(fn: (config: MockConfig) => T): (config: MockConfig) => Promise<T> {\n return (config) => {\n const { promise, resolve } = Promise.withResolvers<T>()\n setTimeout(() => resolve(fn(config)), randomDelay())\n return promise\n }\n}\n\n// POST / — criar favorito\nmock.onPost(BASE_URL).reply(withDelay((config) => {\n const body = JSON.parse(config.data ?? '{}')\n const menuKey: string = body.menuKey\n\n if (!menuKey) {\n return [400, { status: 400, title: 'Bad Request', detail: 'menuKey is required' }]\n }\n\n const exists = favoritos.find((f) => f.menuKey === menuKey && f.ativo)\n if (exists) {\n return [400, { status: 400, title: 'Bad Request', detail: 'Menu already favorited' }]\n }\n\n const novo: TFavoritoMenuResponse = {\n id: nextId++,\n usuarioId: 1,\n menuKey,\n ordem: favoritos.filter((f) => f.ativo).length,\n ativo: true,\n }\n favoritos.push(novo)\n return [200, novo]\n}))\n\n// GET /usuario/{usuarioId} — listar favoritos\nmock.onGet(new RegExp(`${BASE_URL}/usuario/\\\\d+`)).reply(withDelay(() => {\n const ativos = favoritos\n .filter((f) => f.ativo)\n .sort((a, b) => a.ordem - b.ordem)\n return [200, ativos]\n}))\n\n// DELETE /{id} — remover (soft-delete)\nmock.onDelete(new RegExp(`${BASE_URL}/\\\\d+`)).reply(withDelay((config) => {\n const id = Number(config.url?.split('/').pop())\n const fav = favoritos.find((f) => f.id === id)\n\n if (!fav || !fav.ativo) {\n return [400, { status: 400, title: 'Bad Request', detail: 'Favorito not found' }]\n }\n\n fav.ativo = false\n return [204]\n}))\n\n// PUT /reorder — reordenar\nmock.onPut(`${BASE_URL}/reorder`).reply(withDelay((config) => {\n const body = JSON.parse(config.data ?? '{}')\n const orderedIds: number[] = body.orderedIds\n\n if (!orderedIds || orderedIds.length === 0) {\n return [400, { status: 400, title: 'Bad Request', detail: 'orderedIds is required' }]\n }\n\n const reordered: TFavoritoMenuResponse[] = []\n for (let i = 0; i < orderedIds.length; i++) {\n const fav = favoritos.find((f) => f.id === orderedIds[i] && f.ativo)\n if (!fav) {\n return [400, { status: 400, title: 'Bad Request', detail: `Favorito ${orderedIds[i]} not found` }]\n }\n fav.ordem = i\n reordered.push(fav)\n }\n\n return [200, reordered]\n}))"],"names":[],"mappings":";;AAIA,MAAM,WAAW;AAEjB,MAAM,cAAc,MAAM,MAAM,KAAK,WAAW;AAGhD,IAAI,YAAqC,CAAC,GAAG,iBAAiB;AAC9D,IAAI,SAAS,UAAU,SAAS;AAEhC,SAAS,UAAa,IAAmE;AACrF,SAAO,CAAC,WAAW;AACf,UAAM,EAAE,SAAS,YAAY,QAAQ,cAAA;AACrC,eAAW,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,aAAa;AACnD,WAAO;AAAA,EACX;AACJ;AAGA,KAAK,OAAO,QAAQ,EAAE,MAAM,UAAU,CAAC,WAAW;AAC9C,QAAM,OAAO,KAAK,MAAM,OAAO,QAAQ,IAAI;AAC3C,QAAM,UAAkB,KAAK;AAE7B,MAAI,CAAC,SAAS;AACV,WAAO,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,eAAe,QAAQ,uBAAuB;AAAA,EACrF;AAEA,QAAM,SAAS,UAAU,KAAK,CAAC,MAAM,EAAE,YAAY,WAAW,EAAE,KAAK;AACrE,MAAI,QAAQ;AACR,WAAO,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,eAAe,QAAQ,0BAA0B;AAAA,EACxF;AAEA,QAAM,OAA8B;AAAA,IAChC,IAAI;AAAA,IACJ,WAAW;AAAA,IACX;AAAA,IACA,OAAO,UAAU,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE;AAAA,IACxC,OAAO;AAAA,EAAA;AAEX,YAAU,KAAK,IAAI;AACnB,SAAO,CAAC,KAAK,IAAI;AACrB,CAAC,CAAC;AAGF,KAAK,MAAM,IAAI,OAAO,GAAG,QAAQ,eAAe,CAAC,EAAE,MAAM,UAAU,MAAM;AACrE,QAAM,SAAS,UACV,OAAO,CAAC,MAAM,EAAE,KAAK,EACrB,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AACrC,SAAO,CAAC,KAAK,MAAM;AACvB,CAAC,CAAC;AAGF,KAAK,SAAS,IAAI,OAAO,GAAG,QAAQ,OAAO,CAAC,EAAE,MAAM,UAAU,CAAC,WAAW;AACtE,QAAM,KAAK,OAAO,OAAO,KAAK,MAAM,GAAG,EAAE,KAAK;AAC9C,QAAM,MAAM,UAAU,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE;AAE7C,MAAI,CAAC,OAAO,CAAC,IAAI,OAAO;AACpB,WAAO,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,eAAe,QAAQ,sBAAsB;AAAA,EACpF;AAEA,MAAI,QAAQ;AACZ,SAAO,CAAC,GAAG;AACf,CAAC,CAAC;AAGF,KAAK,MAAM,GAAG,QAAQ,UAAU,EAAE,MAAM,UAAU,CAAC,WAAW;AAC1D,QAAM,OAAO,KAAK,MAAM,OAAO,QAAQ,IAAI;AAC3C,QAAM,aAAuB,KAAK;AAElC,MAAI,CAAC,cAAc,WAAW,WAAW,GAAG;AACxC,WAAO,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,eAAe,QAAQ,0BAA0B;AAAA,EACxF;AAEA,QAAM,YAAqC,CAAA;AAC3C,WAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AACxC,UAAM,MAAM,UAAU,KAAK,CAAC,MAAM,EAAE,OAAO,WAAW,CAAC,KAAK,EAAE,KAAK;AACnE,QAAI,CAAC,KAAK;AACN,aAAO,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,eAAe,QAAQ,YAAY,WAAW,CAAC,CAAC,cAAc;AAAA,IACrG;AACA,QAAI,QAAQ;AACZ,cAAU,KAAK,GAAG;AAAA,EACtB;AAEA,SAAO,CAAC,KAAK,SAAS;AAC1B,CAAC,CAAC;"}
|
package/dist/@ecme/mock/index.js
CHANGED
|
@@ -12,6 +12,7 @@ import "./fakeApi/mailFakeApi.js";
|
|
|
12
12
|
import "./fakeApi/accountsFakeApi.js";
|
|
13
13
|
import "./fakeApi/aiFakeApi.js";
|
|
14
14
|
import "./fakeApi/chatFakeApi.js";
|
|
15
|
+
import "./fakeApi/favoritosMenuFakeApi.js";
|
|
15
16
|
import "./fakeApi/helpCenterFakeApi.js";
|
|
16
17
|
import "./fakeApi/dashboardFakeApi.js";
|
|
17
18
|
mock.onAny().passThrough();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../lib/@ecme/mock/index.ts"],"sourcesContent":["import { mock } from './MockAdapter'\nimport './fakeApi/authFakeApi'\nimport './fakeApi/commonFakeApi'\nimport './fakeApi/customersFakeApi'\nimport './fakeApi/productsFakeApi'\nimport './fakeApi/projectsFakeApi'\nimport './fakeApi/ordersFakeApi'\nimport './fakeApi/fileFakeApi'\nimport './fakeApi/logFakeApi'\nimport './fakeApi/calendarFakeApi'\nimport './fakeApi/mailFakeApi'\nimport './fakeApi/accountsFakeApi'\nimport './fakeApi/aiFakeApi'\nimport './fakeApi/chatFakeApi'\nimport './fakeApi/helpCenterFakeApi'\nimport './fakeApi/dashboardFakeApi'\n\nmock.onAny().passThrough()\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../lib/@ecme/mock/index.ts"],"sourcesContent":["import { mock } from './MockAdapter'\nimport './fakeApi/authFakeApi'\nimport './fakeApi/commonFakeApi'\nimport './fakeApi/customersFakeApi'\nimport './fakeApi/productsFakeApi'\nimport './fakeApi/projectsFakeApi'\nimport './fakeApi/ordersFakeApi'\nimport './fakeApi/fileFakeApi'\nimport './fakeApi/logFakeApi'\nimport './fakeApi/calendarFakeApi'\nimport './fakeApi/mailFakeApi'\nimport './fakeApi/accountsFakeApi'\nimport './fakeApi/aiFakeApi'\nimport './fakeApi/chatFakeApi'\nimport './fakeApi/favoritosMenuFakeApi'\nimport './fakeApi/helpCenterFakeApi'\nimport './fakeApi/dashboardFakeApi'\n\nmock.onAny().passThrough()\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAkBA,KAAK,MAAA,EAAQ,YAAA;"}
|
package/dist/@types/@ecme/components/layouts/PostLoginLayout/components/CollapsibleSide.stories.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import CollapsibleSide from './CollapsibleSide';
|
|
3
|
+
declare const meta: Meta<typeof CollapsibleSide>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type TStory = StoryObj<typeof meta>;
|
|
6
|
+
export declare const Default: TStory;
|
|
7
|
+
//# sourceMappingURL=CollapsibleSide.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CollapsibleSide.stories.d.ts","sourceRoot":"","sources":["../../../../../../../lib/@ecme/components/layouts/PostLoginLayout/components/CollapsibleSide.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAEtD,OAAO,eAAe,MAAM,mBAAmB,CAAA;AAE/C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,eAAe,CActC,CAAA;AAED,eAAe,IAAI,CAAA;AAEnB,KAAK,MAAM,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAA;AAEnC,eAAO,MAAM,OAAO,EAAE,MAarB,CAAA"}
|
package/dist/@types/@ecme/components/layouts/PostLoginLayout/components/ContentOverlay.stories.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import ContentOverlay from './ContentOverlay';
|
|
3
|
+
declare const meta: Meta<typeof ContentOverlay>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type TStory = StoryObj<typeof meta>;
|
|
6
|
+
export declare const Default: TStory;
|
|
7
|
+
//# sourceMappingURL=ContentOverlay.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContentOverlay.stories.d.ts","sourceRoot":"","sources":["../../../../../../../lib/@ecme/components/layouts/PostLoginLayout/components/ContentOverlay.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAEtD,OAAO,cAAc,MAAM,kBAAkB,CAAA;AAE7C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,cAAc,CAcrC,CAAA;AAED,eAAe,IAAI,CAAA;AAEnB,KAAK,MAAM,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAA;AAEnC,eAAO,MAAM,OAAO,EAAE,MAUrB,CAAA"}
|
package/dist/@types/@ecme/components/layouts/PostLoginLayout/components/FrameLessSide.stories.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import FrameLessSide from './FrameLessSide';
|
|
3
|
+
declare const meta: Meta<typeof FrameLessSide>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type TStory = StoryObj<typeof meta>;
|
|
6
|
+
export declare const Default: TStory;
|
|
7
|
+
//# sourceMappingURL=FrameLessSide.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FrameLessSide.stories.d.ts","sourceRoot":"","sources":["../../../../../../../lib/@ecme/components/layouts/PostLoginLayout/components/FrameLessSide.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAEtD,OAAO,aAAa,MAAM,iBAAiB,CAAA;AAE3C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,aAAa,CAcpC,CAAA;AAED,eAAe,IAAI,CAAA;AAEnB,KAAK,MAAM,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAA;AAEnC,eAAO,MAAM,OAAO,EAAE,MAUrB,CAAA"}
|
package/dist/@types/@ecme/components/layouts/PostLoginLayout/components/StackedSide.stories.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import StackedSide from './StackedSide';
|
|
3
|
+
declare const meta: Meta<typeof StackedSide>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type TStory = StoryObj<typeof meta>;
|
|
6
|
+
export declare const Default: TStory;
|
|
7
|
+
//# sourceMappingURL=StackedSide.stories.d.ts.map
|
package/dist/@types/@ecme/components/layouts/PostLoginLayout/components/StackedSide.stories.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StackedSide.stories.d.ts","sourceRoot":"","sources":["../../../../../../../lib/@ecme/components/layouts/PostLoginLayout/components/StackedSide.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAEtD,OAAO,WAAW,MAAM,eAAe,CAAA;AAEvC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,WAAW,CAclC,CAAA;AAED,eAAe,IAAI,CAAA;AAEnB,KAAK,MAAM,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAA;AAEnC,eAAO,MAAM,OAAO,EAAE,MAarB,CAAA"}
|
package/dist/@types/@ecme/components/layouts/PostLoginLayout/components/TopBarClassic.stories.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import TopBarClassic from './TopBarClassic';
|
|
3
|
+
declare const meta: Meta<typeof TopBarClassic>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type TStory = StoryObj<typeof meta>;
|
|
6
|
+
export declare const Default: TStory;
|
|
7
|
+
//# sourceMappingURL=TopBarClassic.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TopBarClassic.stories.d.ts","sourceRoot":"","sources":["../../../../../../../lib/@ecme/components/layouts/PostLoginLayout/components/TopBarClassic.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAEtD,OAAO,aAAa,MAAM,iBAAiB,CAAA;AAE3C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,aAAa,CAcpC,CAAA;AAED,eAAe,IAAI,CAAA;AAEnB,KAAK,MAAM,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAA;AAEnC,eAAO,MAAM,OAAO,EAAE,MAarB,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import Header from './Header';
|
|
3
|
+
declare const meta: Meta<typeof Header>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type TStory = StoryObj<typeof meta>;
|
|
6
|
+
export declare const Default: TStory;
|
|
7
|
+
//# sourceMappingURL=Header.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Header.stories.d.ts","sourceRoot":"","sources":["../../../../../lib/@ecme/components/template/Header.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,MAAM,MAAM,UAAU,CAAA;AAE7B,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,MAAM,CAkB7B,CAAA;AAED,eAAe,IAAI,CAAA;AAEnB,KAAK,MAAM,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAA;AAEnC,eAAO,MAAM,OAAO,EAAE,MAkBrB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Search.d.ts","sourceRoot":"","sources":["../../../../../lib/@ecme/components/template/Search.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Search.d.ts","sourceRoot":"","sources":["../../../../../lib/@ecme/components/template/Search.tsx"],"names":[],"mappings":"AAymBA,QAAA,MAAM,MAAM,8EAA0B,CAAA;AAEtC,eAAe,MAAM,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import Search from './Search';
|
|
3
|
+
import '@/mock/fakeApi/favoritosMenuFakeApi';
|
|
4
|
+
declare const meta: Meta<typeof Search>;
|
|
5
|
+
export default meta;
|
|
6
|
+
type TStory = StoryObj<typeof meta>;
|
|
7
|
+
export declare const Default: TStory;
|
|
8
|
+
export declare const FavoritesMenu: TStory;
|
|
9
|
+
//# sourceMappingURL=Search.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Search.stories.d.ts","sourceRoot":"","sources":["../../../../../lib/@ecme/components/template/Search.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAMtD,OAAO,MAAM,MAAM,UAAU,CAAA;AAG7B,OAAO,qCAAqC,CAAA;AA2C5C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,MAAM,CAqB7B,CAAA;AAED,eAAe,IAAI,CAAA;AAEnB,KAAK,MAAM,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAA;AAEnC,eAAO,MAAM,OAAO,EAAE,MAIrB,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,MAW3B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../lib/@ecme/locales/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../lib/@ecme/locales/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,eAAe,IAAI,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"favoritosMenuData.d.ts","sourceRoot":"","sources":["../../../../../lib/@ecme/mock/data/favoritosMenuData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8DAA8D,CAAA;AAEpG,eAAO,MAAM,iBAAiB,EAAE,qBAAqB,EAAO,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"favoritosMenuFakeApi.d.ts","sourceRoot":"","sources":["../../../../../lib/@ecme/mock/fakeApi/favoritosMenuFakeApi.ts"],"names":[],"mappings":""}
|
|
@@ -11,6 +11,7 @@ import './fakeApi/mailFakeApi';
|
|
|
11
11
|
import './fakeApi/accountsFakeApi';
|
|
12
12
|
import './fakeApi/aiFakeApi';
|
|
13
13
|
import './fakeApi/chatFakeApi';
|
|
14
|
+
import './fakeApi/favoritosMenuFakeApi';
|
|
14
15
|
import './fakeApi/helpCenterFakeApi';
|
|
15
16
|
import './fakeApi/dashboardFakeApi';
|
|
16
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../lib/@ecme/mock/index.ts"],"names":[],"mappings":"AACA,OAAO,uBAAuB,CAAA;AAC9B,OAAO,yBAAyB,CAAA;AAChC,OAAO,4BAA4B,CAAA;AACnC,OAAO,2BAA2B,CAAA;AAClC,OAAO,2BAA2B,CAAA;AAClC,OAAO,yBAAyB,CAAA;AAChC,OAAO,uBAAuB,CAAA;AAC9B,OAAO,sBAAsB,CAAA;AAC7B,OAAO,2BAA2B,CAAA;AAClC,OAAO,uBAAuB,CAAA;AAC9B,OAAO,2BAA2B,CAAA;AAClC,OAAO,qBAAqB,CAAA;AAC5B,OAAO,uBAAuB,CAAA;AAC9B,OAAO,6BAA6B,CAAA;AACpC,OAAO,4BAA4B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../lib/@ecme/mock/index.ts"],"names":[],"mappings":"AACA,OAAO,uBAAuB,CAAA;AAC9B,OAAO,yBAAyB,CAAA;AAChC,OAAO,4BAA4B,CAAA;AACnC,OAAO,2BAA2B,CAAA;AAClC,OAAO,2BAA2B,CAAA;AAClC,OAAO,yBAAyB,CAAA;AAChC,OAAO,uBAAuB,CAAA;AAC9B,OAAO,sBAAsB,CAAA;AAC7B,OAAO,2BAA2B,CAAA;AAClC,OAAO,uBAAuB,CAAA;AAC9B,OAAO,2BAA2B,CAAA;AAClC,OAAO,qBAAqB,CAAA;AAC5B,OAAO,uBAAuB,CAAA;AAC9B,OAAO,gCAAgC,CAAA;AACvC,OAAO,6BAA6B,CAAA;AACpC,OAAO,4BAA4B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TCreateFavoritoMenuRequest.d.ts","sourceRoot":"","sources":["../../../../../../../lib/base/@types/api/request/dm/TCreateFavoritoMenuRequest.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,0BAA0B,GAAG;IACvC,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TReorderFavoritosMenuRequest.d.ts","sourceRoot":"","sources":["../../../../../../../lib/base/@types/api/request/dm/TReorderFavoritosMenuRequest.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,4BAA4B,GAAG;IACzC,UAAU,EAAE,MAAM,EAAE,CAAA;CACrB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TFavoritoMenuResponse.d.ts","sourceRoot":"","sources":["../../../../../../../lib/base/@types/api/response/dadosMestres/TFavoritoMenuResponse.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,OAAO,CAAA;CACf,CAAA"}
|
|
@@ -273,4 +273,52 @@ export type TArquivoExcelPpr = {
|
|
|
273
273
|
conteudoBase64: string;
|
|
274
274
|
contentType: string;
|
|
275
275
|
};
|
|
276
|
+
export type TTipoIndicadorPpr = 'META_GLOBAL' | 'META_SETORIAL_GERAL' | 'META_SETORIAL_POR_CC';
|
|
277
|
+
export type TEstadoApuracaoPpr = 'APURADO' | 'PREVIA' | 'AGUARDANDO_DEMAIS_SETORES';
|
|
278
|
+
export type TSituacaoPendenciaPpr = 'SEM_PREENCHIMENTO' | 'AGUARDANDO_ENVIO' | 'AGUARDANDO_APROVACAO' | 'RECUSADO' | 'SEM_FAIXA_CADASTRADA' | 'PESO_INCOMPLETO';
|
|
279
|
+
export type TApuracaoItemPpr = {
|
|
280
|
+
indicador: string;
|
|
281
|
+
tipo: TTipoIndicadorPpr;
|
|
282
|
+
peso: number;
|
|
283
|
+
periodosApurados: number;
|
|
284
|
+
periodosEsperados: number;
|
|
285
|
+
media: number;
|
|
286
|
+
pontos: number;
|
|
287
|
+
};
|
|
288
|
+
export type TApuracaoCentroCustoPpr = {
|
|
289
|
+
parametroCcId: number;
|
|
290
|
+
codigoCentroCusto: string;
|
|
291
|
+
nomeCentroCusto: string;
|
|
292
|
+
habilitado: boolean;
|
|
293
|
+
notaSetorial: number;
|
|
294
|
+
notaGlobal: number;
|
|
295
|
+
notaFinal: number;
|
|
296
|
+
estado: TEstadoApuracaoPpr;
|
|
297
|
+
itens: TApuracaoItemPpr[];
|
|
298
|
+
};
|
|
299
|
+
export type TPendenciaApuracaoPpr = {
|
|
300
|
+
parametroCcId: number | null;
|
|
301
|
+
codigoCentroCusto: string | null;
|
|
302
|
+
nomeCentroCusto: string | null;
|
|
303
|
+
indicador: string | null;
|
|
304
|
+
tipoIndicador: TTipoIndicadorPpr | null;
|
|
305
|
+
peso: number | null;
|
|
306
|
+
periodo: number | null;
|
|
307
|
+
periodoLabel: string | null;
|
|
308
|
+
situacao: TSituacaoPendenciaPpr;
|
|
309
|
+
usuarioQueDeveAgir: number | null;
|
|
310
|
+
};
|
|
311
|
+
export type TApuracaoPpr = {
|
|
312
|
+
ano: number;
|
|
313
|
+
versao: number | null;
|
|
314
|
+
fechada: boolean;
|
|
315
|
+
dataFechamento: string | null;
|
|
316
|
+
observacaoFechamento: string | null;
|
|
317
|
+
consolidadoGeral: number;
|
|
318
|
+
notaGlobal: number;
|
|
319
|
+
anoCompleto: boolean;
|
|
320
|
+
centrosCusto: TApuracaoCentroCustoPpr[];
|
|
321
|
+
pendenciasPreenchimento: TPendenciaApuracaoPpr[];
|
|
322
|
+
pendenciasCadastro: TPendenciaApuracaoPpr[];
|
|
323
|
+
};
|
|
276
324
|
//# sourceMappingURL=ppr.d.ts.map
|