{
  "version": 3,
  "sources": ["../../../src/components/add-new-template/utils.js"],
  "sourcesContent": ["import { useSelect } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { useMemo, useCallback } from '@wordpress/element';\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { blockMeta, post, archive } from '@wordpress/icons';\nimport { safeDecodeURI } from '@wordpress/url';\nimport { TEMPLATE_POST_TYPE } from '../../utils/constants';\n\nconst EMPTY_OBJECT = {};\n\n/**\n * @typedef IHasNameAndId\n * @property {string|number} id   The entity's id.\n * @property {string}        name The entity's name.\n */\n\nconst getValueFromObjectPath = ( object, path ) => {\n\tlet value = object;\n\tpath.split( '.' ).forEach( ( fieldName ) => {\n\t\tvalue = value?.[ fieldName ];\n\t} );\n\treturn value;\n};\n\n/**\n * Helper that adds a prefix to a post slug. The slug needs to be URL-decoded first,\n * so that we have raw Unicode characters there. The server will truncate the slug to\n * 200 characters, respecing Unicode char boundary. On the other hand, the server\n * doesn't detect urlencoded octet boundary and can possibly construct slugs that\n * are not valid urlencoded strings.\n * @param {string} prefix The prefix to add to the slug.\n * @param {string} slug   The slug to add the prefix to.\n * @return {string} The slug with the prefix.\n */\nfunction prefixSlug( prefix, slug ) {\n\treturn `${ prefix }-${ safeDecodeURI( slug ) }`;\n}\n\n/**\n * Helper util to map records to add a `name` prop from a\n * provided path, in order to handle all entities in the same\n * fashion(implementing`IHasNameAndId` interface).\n *\n * @param {Object[]} entities The array of entities.\n * @param {string}   path     The path to map a `name` property from the entity.\n * @return {IHasNameAndId[]} An array of entities that now implement the `IHasNameAndId` interface.\n */\nexport const mapToIHasNameAndId = ( entities, path ) => {\n\treturn ( entities || [] ).map( ( entity ) => ( {\n\t\t...entity,\n\t\tname: decodeEntities( getValueFromObjectPath( entity, path ) ),\n\t} ) );\n};\n\n/**\n * @typedef {Object} EntitiesInfo\n * @property {boolean}  hasEntities         If an entity has available records(posts, terms, etc..).\n * @property {number[]} existingEntitiesIds An array of the existing entities ids.\n */\n\nexport const useExistingTemplates = () => {\n\treturn useSelect(\n\t\t( select ) =>\n\t\t\tselect( coreStore ).getEntityRecords(\n\t\t\t\t'postType',\n\t\t\t\tTEMPLATE_POST_TYPE,\n\t\t\t\t{\n\t\t\t\t\tper_page: -1,\n\t\t\t\t}\n\t\t\t),\n\t\t[]\n\t);\n};\n\nexport const useDefaultTemplateTypes = () => {\n\treturn useSelect(\n\t\t( select ) =>\n\t\t\tselect( coreStore ).getCurrentTheme()?.default_template_types || [],\n\t\t[]\n\t);\n};\n\nconst usePublicPostTypes = () => {\n\tconst postTypes = useSelect(\n\t\t( select ) => select( coreStore ).getPostTypes( { per_page: -1 } ),\n\t\t[]\n\t);\n\treturn useMemo( () => {\n\t\tconst excludedPostTypes = [ 'attachment' ];\n\t\treturn postTypes\n\t\t\t?.filter(\n\t\t\t\t( { viewable, slug } ) =>\n\t\t\t\t\tviewable && ! excludedPostTypes.includes( slug )\n\t\t\t)\n\t\t\t.sort( ( a, b ) => {\n\t\t\t\t// Sort post types alphabetically by name,\n\t\t\t\t// but exclude the built-in 'post' type from sorting.\n\t\t\t\tif ( a.slug === 'post' || b.slug === 'post' ) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn a.name.localeCompare( b.name );\n\t\t\t} );\n\t}, [ postTypes ] );\n};\n\nconst usePublicTaxonomies = () => {\n\tconst taxonomies = useSelect(\n\t\t( select ) => select( coreStore ).getTaxonomies( { per_page: -1 } ),\n\t\t[]\n\t);\n\treturn useMemo( () => {\n\t\treturn taxonomies?.filter(\n\t\t\t( { visibility } ) => visibility?.publicly_queryable\n\t\t);\n\t}, [ taxonomies ] );\n};\n\nexport function usePostTypeArchiveMenuItems() {\n\tconst publicPostTypes = usePublicPostTypes();\n\tconst postTypesWithArchives = useMemo(\n\t\t() => publicPostTypes?.filter( ( postType ) => postType.has_archive ),\n\t\t[ publicPostTypes ]\n\t);\n\tconst existingTemplates = useExistingTemplates();\n\t// We need to keep track of naming conflicts. If a conflict\n\t// occurs, we need to add slug.\n\tconst postTypeLabels = useMemo(\n\t\t() =>\n\t\t\tpublicPostTypes?.reduce( ( accumulator, { labels } ) => {\n\t\t\t\tconst singularName = labels.singular_name.toLowerCase();\n\t\t\t\taccumulator[ singularName ] =\n\t\t\t\t\t( accumulator[ singularName ] || 0 ) + 1;\n\t\t\t\treturn accumulator;\n\t\t\t}, {} ),\n\t\t[ publicPostTypes ]\n\t);\n\tconst needsUniqueIdentifier = useCallback(\n\t\t( { labels, slug } ) => {\n\t\t\tconst singularName = labels.singular_name.toLowerCase();\n\t\t\treturn postTypeLabels[ singularName ] > 1 && singularName !== slug;\n\t\t},\n\t\t[ postTypeLabels ]\n\t);\n\treturn useMemo(\n\t\t() =>\n\t\t\tpostTypesWithArchives\n\t\t\t\t?.filter(\n\t\t\t\t\t( postType ) =>\n\t\t\t\t\t\t! ( existingTemplates || [] ).some(\n\t\t\t\t\t\t\t( existingTemplate ) =>\n\t\t\t\t\t\t\t\texistingTemplate.slug ===\n\t\t\t\t\t\t\t\t'archive-' + postType.slug\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t.map( ( postType ) => {\n\t\t\t\t\tlet title;\n\t\t\t\t\tif ( needsUniqueIdentifier( postType ) ) {\n\t\t\t\t\t\ttitle = sprintf(\n\t\t\t\t\t\t\t// translators: %1s: Name of the post type e.g: \"Post\"; %2s: Slug of the post type e.g: \"book\".\n\t\t\t\t\t\t\t__( 'Archive: %1$s (%2$s)' ),\n\t\t\t\t\t\t\tpostType.labels.singular_name,\n\t\t\t\t\t\t\tpostType.slug\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttitle = sprintf(\n\t\t\t\t\t\t\t// translators: %s: Name of the post type e.g: \"Post\".\n\t\t\t\t\t\t\t__( 'Archive: %s' ),\n\t\t\t\t\t\t\tpostType.labels.singular_name\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tslug: 'archive-' + postType.slug,\n\t\t\t\t\t\tdescription: sprintf(\n\t\t\t\t\t\t\t// translators: %s: Name of the post type e.g: \"Post\".\n\t\t\t\t\t\t\t__(\n\t\t\t\t\t\t\t\t'Displays an archive with the latest posts of type: %s.'\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tpostType.labels.singular_name\n\t\t\t\t\t\t),\n\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t// `icon` is the `menu_icon` property of a post type. We\n\t\t\t\t\t\t// only handle `dashicons` for now, even if the `menu_icon`\n\t\t\t\t\t\t// also supports urls and svg as values.\n\t\t\t\t\t\ticon:\n\t\t\t\t\t\t\ttypeof postType.icon === 'string' &&\n\t\t\t\t\t\t\tpostType.icon.startsWith( 'dashicons-' )\n\t\t\t\t\t\t\t\t? postType.icon.slice( 10 )\n\t\t\t\t\t\t\t\t: archive,\n\t\t\t\t\t\ttemplatePrefix: 'archive',\n\t\t\t\t\t};\n\t\t\t\t} ) || [],\n\t\t[ postTypesWithArchives, existingTemplates, needsUniqueIdentifier ]\n\t);\n}\n\nexport const usePostTypeMenuItems = ( onClickMenuItem ) => {\n\tconst publicPostTypes = usePublicPostTypes();\n\tconst existingTemplates = useExistingTemplates();\n\tconst defaultTemplateTypes = useDefaultTemplateTypes();\n\t// We need to keep track of naming conflicts. If a conflict\n\t// occurs, we need to add slug.\n\tconst templateLabels = useMemo(\n\t\t() =>\n\t\t\tpublicPostTypes?.reduce( ( accumulator, { labels } ) => {\n\t\t\t\tconst templateName = (\n\t\t\t\t\tlabels.template_name || labels.singular_name\n\t\t\t\t).toLowerCase();\n\t\t\t\taccumulator[ templateName ] =\n\t\t\t\t\t( accumulator[ templateName ] || 0 ) + 1;\n\t\t\t\treturn accumulator;\n\t\t\t}, {} ),\n\t\t[ publicPostTypes ]\n\t);\n\tconst needsUniqueIdentifier = useCallback(\n\t\t( { labels, slug } ) => {\n\t\t\tconst templateName = (\n\t\t\t\tlabels.template_name || labels.singular_name\n\t\t\t).toLowerCase();\n\t\t\treturn templateLabels[ templateName ] > 1 && templateName !== slug;\n\t\t},\n\t\t[ templateLabels ]\n\t);\n\n\t// `page`is a special case in template hierarchy.\n\tconst templatePrefixes = useMemo(\n\t\t() =>\n\t\t\tpublicPostTypes?.reduce( ( accumulator, { slug } ) => {\n\t\t\t\tlet suffix = slug;\n\t\t\t\tif ( slug !== 'page' ) {\n\t\t\t\t\tsuffix = `single-${ suffix }`;\n\t\t\t\t}\n\t\t\t\taccumulator[ slug ] = suffix;\n\t\t\t\treturn accumulator;\n\t\t\t}, {} ),\n\t\t[ publicPostTypes ]\n\t);\n\tconst postTypesInfo = useEntitiesInfo( 'postType', templatePrefixes );\n\tconst existingTemplateSlugs = ( existingTemplates || [] ).map(\n\t\t( { slug } ) => slug\n\t);\n\tconst menuItems = ( publicPostTypes || [] ).reduce(\n\t\t( accumulator, postType ) => {\n\t\t\tconst { slug, labels, icon } = postType;\n\t\t\t// We need to check if the general template is part of the\n\t\t\t// defaultTemplateTypes. If it is, just use that info and\n\t\t\t// augment it with the specific template functionality.\n\t\t\tconst generalTemplateSlug = templatePrefixes[ slug ];\n\t\t\tconst defaultTemplateType = defaultTemplateTypes?.find(\n\t\t\t\t( { slug: _slug } ) => _slug === generalTemplateSlug\n\t\t\t);\n\t\t\tconst hasGeneralTemplate =\n\t\t\t\texistingTemplateSlugs?.includes( generalTemplateSlug );\n\t\t\tconst _needsUniqueIdentifier = needsUniqueIdentifier( postType );\n\t\t\tlet menuItemTitle =\n\t\t\t\tlabels.template_name ||\n\t\t\t\tsprintf(\n\t\t\t\t\t// translators: %s: Name of the post type e.g: \"Post\".\n\t\t\t\t\t__( 'Single item: %s' ),\n\t\t\t\t\tlabels.singular_name\n\t\t\t\t);\n\t\t\tif ( _needsUniqueIdentifier ) {\n\t\t\t\tmenuItemTitle = labels.template_name\n\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t// translators: 1: Name of the template e.g: \"Single Item: Post\". 2: Slug of the post type e.g: \"book\".\n\t\t\t\t\t\t\t_x( '%1$s (%2$s)', 'post type menu label' ),\n\t\t\t\t\t\t\tlabels.template_name,\n\t\t\t\t\t\t\tslug\n\t\t\t\t\t  )\n\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t// translators: 1: Name of the post type e.g: \"Post\". 2: Slug of the post type e.g: \"book\".\n\t\t\t\t\t\t\t_x(\n\t\t\t\t\t\t\t\t'Single item: %1$s (%2$s)',\n\t\t\t\t\t\t\t\t'post type menu label'\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tlabels.singular_name,\n\t\t\t\t\t\t\tslug\n\t\t\t\t\t  );\n\t\t\t}\n\t\t\tconst menuItem = defaultTemplateType\n\t\t\t\t? {\n\t\t\t\t\t\t...defaultTemplateType,\n\t\t\t\t\t\ttemplatePrefix: templatePrefixes[ slug ],\n\t\t\t\t  }\n\t\t\t\t: {\n\t\t\t\t\t\tslug: generalTemplateSlug,\n\t\t\t\t\t\ttitle: menuItemTitle,\n\t\t\t\t\t\tdescription: sprintf(\n\t\t\t\t\t\t\t// translators: %s: Name of the post type e.g: \"Post\".\n\t\t\t\t\t\t\t__( 'Displays a single item: %s.' ),\n\t\t\t\t\t\t\tlabels.singular_name\n\t\t\t\t\t\t),\n\t\t\t\t\t\t// `icon` is the `menu_icon` property of a post type. We\n\t\t\t\t\t\t// only handle `dashicons` for now, even if the `menu_icon`\n\t\t\t\t\t\t// also supports urls and svg as values.\n\t\t\t\t\t\ticon:\n\t\t\t\t\t\t\ttypeof icon === 'string' &&\n\t\t\t\t\t\t\ticon.startsWith( 'dashicons-' )\n\t\t\t\t\t\t\t\t? icon.slice( 10 )\n\t\t\t\t\t\t\t\t: post,\n\t\t\t\t\t\ttemplatePrefix: templatePrefixes[ slug ],\n\t\t\t\t  };\n\t\t\tconst hasEntities = postTypesInfo?.[ slug ]?.hasEntities;\n\t\t\t// We have a different template creation flow only if they have entities.\n\t\t\tif ( hasEntities ) {\n\t\t\t\tmenuItem.onClick = ( template ) => {\n\t\t\t\t\tonClickMenuItem( {\n\t\t\t\t\t\ttype: 'postType',\n\t\t\t\t\t\tslug,\n\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\trecordNamePath: 'title.rendered',\n\t\t\t\t\t\t\tqueryArgs: ( { search } ) => {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t_fields: 'id,title,slug,link',\n\t\t\t\t\t\t\t\t\torderBy: search ? 'relevance' : 'modified',\n\t\t\t\t\t\t\t\t\texclude:\n\t\t\t\t\t\t\t\t\t\tpostTypesInfo[ slug ]\n\t\t\t\t\t\t\t\t\t\t\t.existingEntitiesIds,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tgetSpecificTemplate: ( suggestion ) => {\n\t\t\t\t\t\t\t\tconst templateSlug = prefixSlug(\n\t\t\t\t\t\t\t\t\ttemplatePrefixes[ slug ],\n\t\t\t\t\t\t\t\t\tsuggestion.slug\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\ttitle: templateSlug,\n\t\t\t\t\t\t\t\t\tslug: templateSlug,\n\t\t\t\t\t\t\t\t\ttemplatePrefix: templatePrefixes[ slug ],\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlabels,\n\t\t\t\t\t\thasGeneralTemplate,\n\t\t\t\t\t\ttemplate,\n\t\t\t\t\t} );\n\t\t\t\t};\n\t\t\t}\n\t\t\t// We don't need to add the menu item if there are no\n\t\t\t// entities and the general template exists.\n\t\t\tif ( ! hasGeneralTemplate || hasEntities ) {\n\t\t\t\taccumulator.push( menuItem );\n\t\t\t}\n\t\t\treturn accumulator;\n\t\t},\n\t\t[]\n\t);\n\t// Split menu items into two groups: one for the default post types\n\t// and one for the rest.\n\tconst postTypesMenuItems = useMemo(\n\t\t() =>\n\t\t\tmenuItems.reduce(\n\t\t\t\t( accumulator, postType ) => {\n\t\t\t\t\tconst { slug } = postType;\n\t\t\t\t\tlet key = 'postTypesMenuItems';\n\t\t\t\t\tif ( slug === 'page' ) {\n\t\t\t\t\t\tkey = 'defaultPostTypesMenuItems';\n\t\t\t\t\t}\n\t\t\t\t\taccumulator[ key ].push( postType );\n\t\t\t\t\treturn accumulator;\n\t\t\t\t},\n\t\t\t\t{ defaultPostTypesMenuItems: [], postTypesMenuItems: [] }\n\t\t\t),\n\t\t[ menuItems ]\n\t);\n\treturn postTypesMenuItems;\n};\n\nexport const useTaxonomiesMenuItems = ( onClickMenuItem ) => {\n\tconst publicTaxonomies = usePublicTaxonomies();\n\tconst existingTemplates = useExistingTemplates();\n\tconst defaultTemplateTypes = useDefaultTemplateTypes();\n\t// `category` and `post_tag` are special cases in template hierarchy.\n\tconst templatePrefixes = useMemo(\n\t\t() =>\n\t\t\tpublicTaxonomies?.reduce( ( accumulator, { slug } ) => {\n\t\t\t\tlet suffix = slug;\n\t\t\t\tif ( ! [ 'category', 'post_tag' ].includes( slug ) ) {\n\t\t\t\t\tsuffix = `taxonomy-${ suffix }`;\n\t\t\t\t}\n\t\t\t\tif ( slug === 'post_tag' ) {\n\t\t\t\t\tsuffix = `tag`;\n\t\t\t\t}\n\t\t\t\taccumulator[ slug ] = suffix;\n\t\t\t\treturn accumulator;\n\t\t\t}, {} ),\n\t\t[ publicTaxonomies ]\n\t);\n\t// We need to keep track of naming conflicts. If a conflict\n\t// occurs, we need to add slug.\n\tconst taxonomyLabels = publicTaxonomies?.reduce(\n\t\t( accumulator, { labels } ) => {\n\t\t\tconst templateName = (\n\t\t\t\tlabels.template_name || labels.singular_name\n\t\t\t).toLowerCase();\n\t\t\taccumulator[ templateName ] =\n\t\t\t\t( accumulator[ templateName ] || 0 ) + 1;\n\t\t\treturn accumulator;\n\t\t},\n\t\t{}\n\t);\n\tconst needsUniqueIdentifier = ( labels, slug ) => {\n\t\tif ( [ 'category', 'post_tag' ].includes( slug ) ) {\n\t\t\treturn false;\n\t\t}\n\t\tconst templateName = (\n\t\t\tlabels.template_name || labels.singular_name\n\t\t).toLowerCase();\n\t\treturn taxonomyLabels[ templateName ] > 1 && templateName !== slug;\n\t};\n\tconst taxonomiesInfo = useEntitiesInfo( 'taxonomy', templatePrefixes );\n\tconst existingTemplateSlugs = ( existingTemplates || [] ).map(\n\t\t( { slug } ) => slug\n\t);\n\tconst menuItems = ( publicTaxonomies || [] ).reduce(\n\t\t( accumulator, taxonomy ) => {\n\t\t\tconst { slug, labels } = taxonomy;\n\t\t\t// We need to check if the general template is part of the\n\t\t\t// defaultTemplateTypes. If it is, just use that info and\n\t\t\t// augment it with the specific template functionality.\n\t\t\tconst generalTemplateSlug = templatePrefixes[ slug ];\n\t\t\tconst defaultTemplateType = defaultTemplateTypes?.find(\n\t\t\t\t( { slug: _slug } ) => _slug === generalTemplateSlug\n\t\t\t);\n\t\t\tconst hasGeneralTemplate =\n\t\t\t\texistingTemplateSlugs?.includes( generalTemplateSlug );\n\t\t\tconst _needsUniqueIdentifier = needsUniqueIdentifier(\n\t\t\t\tlabels,\n\t\t\t\tslug\n\t\t\t);\n\t\t\tlet menuItemTitle = labels.template_name || labels.singular_name;\n\t\t\tif ( _needsUniqueIdentifier ) {\n\t\t\t\tmenuItemTitle = labels.template_name\n\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t// translators: 1: Name of the template e.g: \"Products by Category\". 2: Slug of the taxonomy e.g: \"product_cat\".\n\t\t\t\t\t\t\t_x( '%1$s (%2$s)', 'taxonomy template menu label' ),\n\t\t\t\t\t\t\tlabels.template_name,\n\t\t\t\t\t\t\tslug\n\t\t\t\t\t  )\n\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t// translators: 1: Name of the taxonomy e.g: \"Category\". 2: Slug of the taxonomy e.g: \"product_cat\".\n\t\t\t\t\t\t\t_x( '%1$s (%2$s)', 'taxonomy menu label' ),\n\t\t\t\t\t\t\tlabels.singular_name,\n\t\t\t\t\t\t\tslug\n\t\t\t\t\t  );\n\t\t\t}\n\t\t\tconst menuItem = defaultTemplateType\n\t\t\t\t? {\n\t\t\t\t\t\t...defaultTemplateType,\n\t\t\t\t\t\ttemplatePrefix: templatePrefixes[ slug ],\n\t\t\t\t  }\n\t\t\t\t: {\n\t\t\t\t\t\tslug: generalTemplateSlug,\n\t\t\t\t\t\ttitle: menuItemTitle,\n\t\t\t\t\t\tdescription: sprintf(\n\t\t\t\t\t\t\t// translators: %s: Name of the taxonomy e.g: \"Product Categories\".\n\t\t\t\t\t\t\t__( 'Displays taxonomy: %s.' ),\n\t\t\t\t\t\t\tlabels.singular_name\n\t\t\t\t\t\t),\n\t\t\t\t\t\ticon: blockMeta,\n\t\t\t\t\t\ttemplatePrefix: templatePrefixes[ slug ],\n\t\t\t\t  };\n\t\t\tconst hasEntities = taxonomiesInfo?.[ slug ]?.hasEntities;\n\t\t\t// We have a different template creation flow only if they have entities.\n\t\t\tif ( hasEntities ) {\n\t\t\t\tmenuItem.onClick = ( template ) => {\n\t\t\t\t\tonClickMenuItem( {\n\t\t\t\t\t\ttype: 'taxonomy',\n\t\t\t\t\t\tslug,\n\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\tqueryArgs: ( { search } ) => {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t_fields: 'id,name,slug,link',\n\t\t\t\t\t\t\t\t\torderBy: search ? 'name' : 'count',\n\t\t\t\t\t\t\t\t\texclude:\n\t\t\t\t\t\t\t\t\t\ttaxonomiesInfo[ slug ]\n\t\t\t\t\t\t\t\t\t\t\t.existingEntitiesIds,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tgetSpecificTemplate: ( suggestion ) => {\n\t\t\t\t\t\t\t\tconst templateSlug = prefixSlug(\n\t\t\t\t\t\t\t\t\ttemplatePrefixes[ slug ],\n\t\t\t\t\t\t\t\t\tsuggestion.slug\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\ttitle: templateSlug,\n\t\t\t\t\t\t\t\t\tslug: templateSlug,\n\t\t\t\t\t\t\t\t\ttemplatePrefix: templatePrefixes[ slug ],\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlabels,\n\t\t\t\t\t\thasGeneralTemplate,\n\t\t\t\t\t\ttemplate,\n\t\t\t\t\t} );\n\t\t\t\t};\n\t\t\t}\n\t\t\t// We don't need to add the menu item if there are no\n\t\t\t// entities and the general template exists.\n\t\t\tif ( ! hasGeneralTemplate || hasEntities ) {\n\t\t\t\taccumulator.push( menuItem );\n\t\t\t}\n\t\t\treturn accumulator;\n\t\t},\n\t\t[]\n\t);\n\t// Split menu items into two groups: one for the default taxonomies\n\t// and one for the rest.\n\tconst taxonomiesMenuItems = useMemo(\n\t\t() =>\n\t\t\tmenuItems.reduce(\n\t\t\t\t( accumulator, taxonomy ) => {\n\t\t\t\t\tconst { slug } = taxonomy;\n\t\t\t\t\tlet key = 'taxonomiesMenuItems';\n\t\t\t\t\tif ( [ 'category', 'tag' ].includes( slug ) ) {\n\t\t\t\t\t\tkey = 'defaultTaxonomiesMenuItems';\n\t\t\t\t\t}\n\t\t\t\t\taccumulator[ key ].push( taxonomy );\n\t\t\t\t\treturn accumulator;\n\t\t\t\t},\n\t\t\t\t{ defaultTaxonomiesMenuItems: [], taxonomiesMenuItems: [] }\n\t\t\t),\n\t\t[ menuItems ]\n\t);\n\treturn taxonomiesMenuItems;\n};\n\nconst USE_AUTHOR_MENU_ITEM_TEMPLATE_PREFIX = { user: 'author' };\nconst USE_AUTHOR_MENU_ITEM_QUERY_PARAMETERS = { user: { who: 'authors' } };\nexport function useAuthorMenuItem( onClickMenuItem ) {\n\tconst existingTemplates = useExistingTemplates();\n\tconst defaultTemplateTypes = useDefaultTemplateTypes();\n\tconst authorInfo = useEntitiesInfo(\n\t\t'root',\n\t\tUSE_AUTHOR_MENU_ITEM_TEMPLATE_PREFIX,\n\t\tUSE_AUTHOR_MENU_ITEM_QUERY_PARAMETERS\n\t);\n\tlet authorMenuItem = defaultTemplateTypes?.find(\n\t\t( { slug } ) => slug === 'author'\n\t);\n\tif ( ! authorMenuItem ) {\n\t\tauthorMenuItem = {\n\t\t\tdescription: __(\n\t\t\t\t'Displays latest posts written by a single author.'\n\t\t\t),\n\t\t\tslug: 'author',\n\t\t\ttitle: 'Author',\n\t\t};\n\t}\n\tconst hasGeneralTemplate = !! existingTemplates?.find(\n\t\t( { slug } ) => slug === 'author'\n\t);\n\tif ( authorInfo.user?.hasEntities ) {\n\t\tauthorMenuItem = { ...authorMenuItem, templatePrefix: 'author' };\n\t\tauthorMenuItem.onClick = ( template ) => {\n\t\t\tonClickMenuItem( {\n\t\t\t\ttype: 'root',\n\t\t\t\tslug: 'user',\n\t\t\t\tconfig: {\n\t\t\t\t\tqueryArgs: ( { search } ) => {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t_fields: 'id,name,slug,link',\n\t\t\t\t\t\t\torderBy: search ? 'name' : 'registered_date',\n\t\t\t\t\t\t\texclude: authorInfo.user.existingEntitiesIds,\n\t\t\t\t\t\t\twho: 'authors',\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\t\t\t\t\tgetSpecificTemplate: ( suggestion ) => {\n\t\t\t\t\t\tconst templateSlug = prefixSlug(\n\t\t\t\t\t\t\t'author',\n\t\t\t\t\t\t\tsuggestion.slug\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttitle: templateSlug,\n\t\t\t\t\t\t\tslug: templateSlug,\n\t\t\t\t\t\t\ttemplatePrefix: 'author',\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tlabels: {\n\t\t\t\t\tsingular_name: __( 'Author' ),\n\t\t\t\t\tsearch_items: __( 'Search Authors' ),\n\t\t\t\t\tnot_found: __( 'No authors found.' ),\n\t\t\t\t\tall_items: __( 'All Authors' ),\n\t\t\t\t},\n\t\t\t\thasGeneralTemplate,\n\t\t\t\ttemplate,\n\t\t\t} );\n\t\t};\n\t}\n\tif ( ! hasGeneralTemplate || authorInfo.user?.hasEntities ) {\n\t\treturn authorMenuItem;\n\t}\n}\n\n/**\n * Helper hook that filters all the existing templates by the given\n * object with the entity's slug as key and the template prefix as value.\n *\n * Example:\n * `existingTemplates` is: [ { slug: 'tag-apple' }, { slug: 'page-about' }, { slug: 'tag' } ]\n * `templatePrefixes` is: { post_tag: 'tag' }\n * It will return: { post_tag: ['apple'] }\n *\n * Note: We append the `-` to the given template prefix in this function for our checks.\n *\n * @param {Record<string,string>} templatePrefixes An object with the entity's slug as key and the template prefix as value.\n * @return {Record<string,string[]>} An object with the entity's slug as key and an array with the existing template slugs as value.\n */\nconst useExistingTemplateSlugs = ( templatePrefixes ) => {\n\tconst existingTemplates = useExistingTemplates();\n\tconst existingSlugs = useMemo( () => {\n\t\treturn Object.entries( templatePrefixes || {} ).reduce(\n\t\t\t( accumulator, [ slug, prefix ] ) => {\n\t\t\t\tconst slugsWithTemplates = ( existingTemplates || [] ).reduce(\n\t\t\t\t\t( _accumulator, existingTemplate ) => {\n\t\t\t\t\t\tconst _prefix = `${ prefix }-`;\n\t\t\t\t\t\tif ( existingTemplate.slug.startsWith( _prefix ) ) {\n\t\t\t\t\t\t\t_accumulator.push(\n\t\t\t\t\t\t\t\texistingTemplate.slug.substring(\n\t\t\t\t\t\t\t\t\t_prefix.length\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn _accumulator;\n\t\t\t\t\t},\n\t\t\t\t\t[]\n\t\t\t\t);\n\t\t\t\tif ( slugsWithTemplates.length ) {\n\t\t\t\t\taccumulator[ slug ] = slugsWithTemplates;\n\t\t\t\t}\n\t\t\t\treturn accumulator;\n\t\t\t},\n\t\t\t{}\n\t\t);\n\t}, [ templatePrefixes, existingTemplates ] );\n\treturn existingSlugs;\n};\n\n/**\n * Helper hook that finds the existing records with an associated template,\n * as they need to be excluded from the template suggestions.\n *\n * @param {string}                entityName                The entity's name.\n * @param {Record<string,string>} templatePrefixes          An object with the entity's slug as key and the template prefix as value.\n * @param {Record<string,Object>} additionalQueryParameters An object with the entity's slug as key and additional query parameters as value.\n * @return {Record<string,EntitiesInfo>} An object with the entity's slug as key and the existing records as value.\n */\nconst useTemplatesToExclude = (\n\tentityName,\n\ttemplatePrefixes,\n\tadditionalQueryParameters = {}\n) => {\n\tconst slugsToExcludePerEntity =\n\t\tuseExistingTemplateSlugs( templatePrefixes );\n\tconst recordsToExcludePerEntity = useSelect(\n\t\t( select ) => {\n\t\t\treturn Object.entries( slugsToExcludePerEntity || {} ).reduce(\n\t\t\t\t( accumulator, [ slug, slugsWithTemplates ] ) => {\n\t\t\t\t\tconst entitiesWithTemplates = select(\n\t\t\t\t\t\tcoreStore\n\t\t\t\t\t).getEntityRecords( entityName, slug, {\n\t\t\t\t\t\t_fields: 'id',\n\t\t\t\t\t\tcontext: 'view',\n\t\t\t\t\t\tslug: slugsWithTemplates,\n\t\t\t\t\t\t...additionalQueryParameters[ slug ],\n\t\t\t\t\t} );\n\t\t\t\t\tif ( entitiesWithTemplates?.length ) {\n\t\t\t\t\t\taccumulator[ slug ] = entitiesWithTemplates;\n\t\t\t\t\t}\n\t\t\t\t\treturn accumulator;\n\t\t\t\t},\n\t\t\t\t{}\n\t\t\t);\n\t\t},\n\t\t[ slugsToExcludePerEntity ]\n\t);\n\treturn recordsToExcludePerEntity;\n};\n\n/**\n * Helper hook that returns information about an entity having\n * records that we can create a specific template for.\n *\n * For example we can search for `terms` in `taxonomy` entity or\n * `posts` in `postType` entity.\n *\n * First we need to find the existing records with an associated template,\n * to query afterwards for any remaining record, by excluding them.\n *\n * @param {string}                entityName                The entity's name.\n * @param {Record<string,string>} templatePrefixes          An object with the entity's slug as key and the template prefix as value.\n * @param {Record<string,Object>} additionalQueryParameters An object with the entity's slug as key and additional query parameters as value.\n * @return {Record<string,EntitiesInfo>} An object with the entity's slug as key and the EntitiesInfo as value.\n */\nconst useEntitiesInfo = (\n\tentityName,\n\ttemplatePrefixes,\n\tadditionalQueryParameters = EMPTY_OBJECT\n) => {\n\tconst recordsToExcludePerEntity = useTemplatesToExclude(\n\t\tentityName,\n\t\ttemplatePrefixes,\n\t\tadditionalQueryParameters\n\t);\n\tconst entitiesHasRecords = useSelect(\n\t\t( select ) => {\n\t\t\treturn Object.keys( templatePrefixes || {} ).reduce(\n\t\t\t\t( accumulator, slug ) => {\n\t\t\t\t\tconst existingEntitiesIds =\n\t\t\t\t\t\trecordsToExcludePerEntity?.[ slug ]?.map(\n\t\t\t\t\t\t\t( { id } ) => id\n\t\t\t\t\t\t) || [];\n\t\t\t\t\tconst records = select( coreStore ).getEntityRecords(\n\t\t\t\t\t\tentityName,\n\t\t\t\t\t\tslug,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tper_page: 1,\n\t\t\t\t\t\t\t_fields: 'id',\n\t\t\t\t\t\t\tcontext: 'view',\n\t\t\t\t\t\t\texclude: existingEntitiesIds,\n\t\t\t\t\t\t\t...additionalQueryParameters[ slug ],\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t\taccumulator[ slug ] =\n\t\t\t\t\t\trecords === null || records.length > 0;\n\t\t\t\t\treturn accumulator;\n\t\t\t\t},\n\t\t\t\t{}\n\t\t\t);\n\t\t},\n\t\t[\n\t\t\ttemplatePrefixes,\n\t\t\trecordsToExcludePerEntity,\n\t\t\tentityName,\n\t\t\tadditionalQueryParameters,\n\t\t]\n\t);\n\tconst entitiesInfo = useMemo( () => {\n\t\treturn Object.keys( templatePrefixes || {} ).reduce(\n\t\t\t( accumulator, slug ) => {\n\t\t\t\tconst existingEntitiesIds =\n\t\t\t\t\trecordsToExcludePerEntity?.[ slug ]?.map(\n\t\t\t\t\t\t( { id } ) => id\n\t\t\t\t\t) || [];\n\t\t\t\taccumulator[ slug ] = {\n\t\t\t\t\thasEntities: entitiesHasRecords[ slug ],\n\t\t\t\t\texistingEntitiesIds,\n\t\t\t\t};\n\t\t\t\treturn accumulator;\n\t\t\t},\n\t\t\t{}\n\t\t);\n\t}, [ templatePrefixes, recordsToExcludePerEntity, entitiesHasRecords ] );\n\treturn entitiesInfo;\n};\n"],
  "mappings": "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",
  "names": ["coreStore"]
}
