@mikezimm/fps-library-v2
Version:
Library of reusable typescript/javascript functions, interfaces and constants
171 lines (170 loc) • 9.04 kB
JavaScript
/**
* 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