UNPKG

@mikezimm/fps-library-v2

Version:

Library of reusable typescript/javascript functions, interfaces and constants

171 lines (170 loc) 9.04 kB
/** * CodeAnalizerComment: Updated 7 imports on 2024-09-22 14:49:52 * Update:: import { IFPSItem } to '@mikezimm/fps-core-v7/lib/components/molecules/AnyContent/IAnyContent;' * Update:: import { IWebpartBannerProps } to '@mikezimm/fps-core-v7/lib/banner/mainReact/IWebpartBannerProps;' * Update:: import { IStateSource } to '@mikezimm/fps-core-v7/lib/components/molecules/state-source/IStateSource;' * Update:: import { addPopularityToItems } to '@mikezimm/fps-core-v7/lib/components/molecules/SearchPage/functions/markPopular;' * Update:: import { addSearchMeta2 } to '@mikezimm/fps-core-v7/lib/components/molecules/SearchPage/functions/addSearchMeta2;' * Update:: import { addSearchMeta1 } to '@mikezimm/fps-core-v7/lib/components/molecules/SearchPage/functions/addSearchMeta1;' * Update:: import { addListIsAMeta } to '@mikezimm/fps-core-v7/lib/components/molecules/SearchPage/functions/addListIsAMeta;' */ import { createErrorFPSTileItem } from './Any/createErrorFPSTileItem'; import { MAXSearchTypes } from '@mikezimm/fps-core-v7/lib/components/molecules/SearchPage/Interfaces/ProgrammingFileKeys'; import { getSourceListsAPI } from "@mikezimm/fps-core-v7/lib/restAPIs/lists/lists/getSourceListsAPI"; import { makeFPSListTiles } from './Lists/makeFPSListTiles'; import { addPopularityToItems } from '@mikezimm/fps-core-v7/lib/components/molecules/SearchPage/functions/markPopular'; import { addSearchMeta2 } from '@mikezimm/fps-core-v7/lib/components/molecules/SearchPage/functions/addSearchMeta2'; import { addSearchMeta1 } from '@mikezimm/fps-core-v7/lib/components/molecules/SearchPage/functions/addSearchMeta1'; import { addListIsAMeta } from '@mikezimm/fps-core-v7/lib/components/molecules/SearchPage/functions/addListIsAMeta'; import { addEasyIcons } from "@mikezimm/fps-core-v7/lib/components/atoms/easy-icons/functions/getEasyIcon"; import { EmptyFPSItemSearch } from '@mikezimm/fps-core-v7/lib/components/molecules/AnyContent/IFPSItemSearch'; import { EasyIconLocation } from '@mikezimm/fps-core-v7/lib/components/atoms/easy-icons/interfaces/EasyIconLocation'; // import { makeFPSFileTileItems } from './Lists/makeFPSTileItems'; /** * getFPSHubTiles was built for Hub Connection's web part to fetch both sites and webs. * Use the depth property to specify either sites or webs. * * Be sure to filter for Lists/Libraries/SystemLists etc in the parent component * * @param bannerProps * @param sourceProps * @param search * @param WPFPSItem - use buildFpsTileWPProps * @param departmentId - if for current site, leave empty, will get from bannerProps * @returns */ export async function getFPSListTiles(bannerProps, ListProps, search, webPartFPSItem) { ListProps = addHiddenAndTypeToFilter(ListProps); // Had to auto-add this becauseMinFetchListProps does not really need it by default for just lists. // HOWEVER, Will need it for EasyContents ListProps.key = 'lists'; // 2025-01-20: Changed from 'lists' to 'list' so it matches singular version for StdSharePointKeys and IFPSBaseContentType ListProps.defType = 'list'; ListProps.fpsContentType = 'list'; if (!ListProps['searchProps'] || ListProps['searchProps'].length === 0) ListProps['searchProps'] = ['Title', 'Description', 'EntityTypeName']; // eslint-disable-next-line @typescript-eslint/no-explicit-any let results = await getSourceListsAPI(ListProps, true, true); if (!results.index) results.index = []; // Adding because I cast results as any if (results.status !== 'Success') { results.itemsY = [createErrorFPSTileItem(results, webPartFPSItem)]; } else { // HAVE TO ADD THIS AHEAD OF addSearchMeta1 because addSearchMeta1 does some search processing results.itemsY = results.items.map(item => { item.FPSItem = { IsA: { allIsAKeys: [], allIsAKeysStr: '' }, File: { valid: false, fileDisplayName: '' }, Search: JSON.parse(JSON.stringify(EmptyFPSItemSearch)), }; item = addListIsAMeta(item); return item; }); if (ListProps.systemLists === 'ExcludeSystem') { // Non-System lists should have NO IsA.System value if it's a normal list so this should work correctly. results.itemsY = results.itemsY.filter(obj => obj.FPSItem.IsA.System !== true); } else if (ListProps.systemLists === 'OnlySystem') { results.itemsY = results.itemsY.filter(obj => obj.FPSItem.IsA.System === true); } // doing addSearchMetaAllV2 but without the // results.itemsY = addSearchMetaAllV2(results.items, ListProps as ISourceProps, search, MAXSearchTypes, .2); results.itemsY = addSearchMeta1(results.itemsY, ListProps, search); results.itemsY = addSearchMeta2(results.itemsY, MAXSearchTypes); results.itemsY = addPopularityToItems(results.itemsY, .2); // https://github.com/mikezimm/pivottiles7/issues/402 results.itemsY = addEasyIcons(results.itemsY, ListProps, bannerProps.EasyIconsObject, true); results = makeFPSListTiles(results, bannerProps, webPartFPSItem); results = catchAllListFPSItemUpdate(results, ListProps, bannerProps.EasyIconsObject); } return results; } export function hasFPSItemImageIcon(item) { const FPSItem = item.FPSItem; let hasIconOrImage = false; if (FPSItem.Image && FPSItem.Image.src) { hasIconOrImage = true; } if (FPSItem.Image && FPSItem.Icon.name) { hasIconOrImage = true; } return hasIconOrImage; } /** * Will add Icons for lists with common names/templates like Events * @param results */ export function catchAllListFPSItemUpdate(results, sourceProps, EasyIconsObject) { results.itemsY.map((item) => { const { Title, Description, FPSItem, BaseType } = item; if (!hasFPSItemImageIcon(item)) { const { Icon = { name: 'darkgray', css: { color: 'darkgray' }, href: '' } } = item.FPSItem; if (!Icon.css.color) Icon.css.color = 'dakrgray'; if (`${Title} | ${Description}`.indexOf('Events') > -1) { Icon.name = 'DateTime12'; } else if (BaseType === 1) { Icon.name = 'FabricFolder'; } else { Icon.name = 'BulletedList'; Icon.css.color = 'darkslateblue'; } } // Fix some known link peculiarities // Hard coding some system list Urls: https://github.com/mikezimm/pivottiles7/issues/263 const { webUrl } = sourceProps; let fixHref = ''; if (item.Title === 'Content and Structure Reports') { fixHref = `${webUrl}/Reports%20List`; } else if (item.Title === 'Reusable Content') { fixHref = `${webUrl}/ReusableContent`; } else if (item.Title === 'Workflow Tasks') { fixHref = `${webUrl}/WorkflowTasks`; } else if (item.Title === 'Style Library') { item.FPSItem.Image.src = `${EasyIconLocation}/SharePoint/${'Style Library'}.png`; } if (fixHref) item.FPSItem.Link.href = fixHref; }); return results; } /** * addHiddenAndTypeToFilter will update the restFilter based on Hidden and BaseType Fetch Props * because those are common choices that can be baked into the rest call. * Filtering for SystemLists has to be done with the results because there are to many to add to a rest filter. * * @param ListProps * @returns */ export function addHiddenAndTypeToFilter(ListProps) { const { BaseType, Hidden } = ListProps; // If BaseType is not defined, then return as is. if (!ListProps.restFilter) ListProps.restFilter = ``; // Always define as empty string if it does not exist. if (BaseType === 0 || BaseType === 1) { if (ListProps.selectThese.indexOf('BaseType') < 0) ListProps.selectThese.push('BaseType'); const addFilter = `BaseType eq ${BaseType}`; // If BaseType is already included in restFilter, then return as is if (ListProps.restFilter.indexOf(addFilter) < 0) { ListProps.restFilter = !ListProps.restFilter ? addFilter : ListProps.restFilter += ` and ${addFilter}`; } } if (Hidden === false || Hidden === true) { if (ListProps.selectThese.indexOf('Hidden') < 0) ListProps.selectThese.push('Hidden'); const addFilter = `Hidden eq ${Hidden}`; // If BaseType is already included in restFilter, then return as is if (ListProps.restFilter.indexOf(addFilter) < 0) { ListProps.restFilter = !ListProps.restFilter ? addFilter : ListProps.restFilter += ` and ${addFilter}`; } } return ListProps; } //# sourceMappingURL=getFPSListTiles.js.map