{
  "version": 3,
  "sources": ["../../src/screen-revisions/use-global-styles-revisions.tsx"],
  "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport {\n\tstore as coreStore,\n\ttype GlobalStylesRevision,\n} from '@wordpress/core-data';\nimport { useContext, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { GlobalStylesContext } from '../context';\nimport type { Revision, User } from './types';\n\ninterface RawRevision extends Omit< Revision, 'author' > {\n\tauthor?: number;\n}\n\ninterface Query {\n\tper_page?: number;\n\tpage?: number;\n}\n\ninterface UseGlobalStylesRevisionsParams {\n\tquery?: Query;\n}\n\ninterface UseGlobalStylesRevisionsReturn {\n\trevisions: Revision[];\n\thasUnsavedChanges: boolean;\n\tisLoading: boolean;\n\trevisionsCount: number;\n}\n\nconst SITE_EDITOR_AUTHORS_QUERY = {\n\tper_page: -1,\n\t_fields: 'id,name,avatar_urls',\n\tcontext: 'view',\n\tcapabilities: [ 'edit_theme_options' ],\n};\nconst DEFAULT_QUERY = { per_page: 100, page: 1 };\nconst EMPTY_ARRAY: [] = [];\n\nexport default function useGlobalStylesRevisions( {\n\tquery,\n}: UseGlobalStylesRevisionsParams = {} ): UseGlobalStylesRevisionsReturn {\n\tconst { user: userConfig } = useContext( GlobalStylesContext );\n\tconst _query: Query = useMemo(\n\t\t() => ( { ...DEFAULT_QUERY, ...query } ),\n\t\t[ query ]\n\t);\n\tconst {\n\t\tauthors,\n\t\tcurrentUser,\n\t\tisDirty,\n\t\trevisions,\n\t\tisLoadingGlobalStylesRevisions,\n\t\trevisionsCount,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\t__experimentalGetDirtyEntityRecords,\n\t\t\t\tgetCurrentUser,\n\t\t\t\tgetUsers,\n\t\t\t\tgetRevisions,\n\t\t\t\t__experimentalGetCurrentGlobalStylesId,\n\t\t\t\tgetEntityRecord,\n\t\t\t\tisResolving,\n\t\t\t} = select( coreStore );\n\t\t\tconst dirtyEntityRecords =\n\t\t\t\t__experimentalGetDirtyEntityRecords() || [];\n\t\t\tconst _currentUser = getCurrentUser();\n\t\t\tconst _isDirty = dirtyEntityRecords.length > 0;\n\t\t\tconst globalStylesId = __experimentalGetCurrentGlobalStylesId();\n\t\t\tconst globalStyles = globalStylesId\n\t\t\t\t? getEntityRecord< GlobalStylesRevision >(\n\t\t\t\t\t\t'root',\n\t\t\t\t\t\t'globalStyles',\n\t\t\t\t\t\tglobalStylesId\n\t\t\t\t  )\n\t\t\t\t: undefined;\n\t\t\tconst _revisionsCount: number =\n\t\t\t\t// @ts-expect-error - _links is not typed in GlobalStylesRevision\n\t\t\t\tglobalStyles?._links?.[ 'version-history' ]?.[ 0 ]?.count ?? 0;\n\t\t\t// @ts-expect-error - getRevisions is not fully typed\n\t\t\tconst globalStylesRevisions: RawRevision[] = globalStylesId\n\t\t\t\t? getRevisions(\n\t\t\t\t\t\t'root',\n\t\t\t\t\t\t'globalStyles',\n\t\t\t\t\t\tglobalStylesId,\n\t\t\t\t\t\t_query\n\t\t\t\t  ) || EMPTY_ARRAY\n\t\t\t\t: EMPTY_ARRAY;\n\t\t\t// @ts-expect-error - getUsers is not fully typed\n\t\t\tconst _authors: User[] =\n\t\t\t\tgetUsers( SITE_EDITOR_AUTHORS_QUERY ) || EMPTY_ARRAY;\n\t\t\tconst _isResolving = globalStylesId\n\t\t\t\t? isResolving( 'getRevisions', [\n\t\t\t\t\t\t'root',\n\t\t\t\t\t\t'globalStyles',\n\t\t\t\t\t\tglobalStylesId,\n\t\t\t\t\t\t_query,\n\t\t\t\t  ] )\n\t\t\t\t: false;\n\t\t\treturn {\n\t\t\t\tauthors: _authors,\n\t\t\t\tcurrentUser: _currentUser,\n\t\t\t\tisDirty: _isDirty,\n\t\t\t\trevisions: globalStylesRevisions,\n\t\t\t\tisLoadingGlobalStylesRevisions: _isResolving,\n\t\t\t\trevisionsCount: _revisionsCount,\n\t\t\t};\n\t\t},\n\t\t[ _query ]\n\t);\n\treturn useMemo( (): UseGlobalStylesRevisionsReturn => {\n\t\tif ( ! authors.length || isLoadingGlobalStylesRevisions ) {\n\t\t\treturn {\n\t\t\t\trevisions: EMPTY_ARRAY as Revision[],\n\t\t\t\thasUnsavedChanges: isDirty,\n\t\t\t\tisLoading: true,\n\t\t\t\trevisionsCount,\n\t\t\t};\n\t\t}\n\n\t\t// Adds author details to each revision.\n\t\tconst _modifiedRevisions: Revision[] = revisions.map( ( revision ) => {\n\t\t\treturn {\n\t\t\t\t...revision,\n\t\t\t\tauthor: authors.find(\n\t\t\t\t\t( author ) => author.id === revision.author\n\t\t\t\t),\n\t\t\t};\n\t\t} );\n\n\t\tconst fetchedRevisionsCount = revisions.length;\n\n\t\tif ( fetchedRevisionsCount ) {\n\t\t\t// Flags the most current saved revision.\n\t\t\tif (\n\t\t\t\t_modifiedRevisions[ 0 ].id !== 'unsaved' &&\n\t\t\t\t_query.page === 1\n\t\t\t) {\n\t\t\t\t_modifiedRevisions[ 0 ].isLatest = true;\n\t\t\t}\n\n\t\t\t// Adds an item for unsaved changes.\n\t\t\tif (\n\t\t\t\tisDirty &&\n\t\t\t\tuserConfig &&\n\t\t\t\tObject.keys( userConfig ).length > 0 &&\n\t\t\t\tcurrentUser &&\n\t\t\t\t_query.page === 1\n\t\t\t) {\n\t\t\t\tconst unsavedRevision: Revision = {\n\t\t\t\t\tid: 'unsaved',\n\t\t\t\t\tstyles: userConfig?.styles,\n\t\t\t\t\tsettings: userConfig?.settings,\n\t\t\t\t\t_links: userConfig?._links,\n\t\t\t\t\tauthor: {\n\t\t\t\t\t\tname: currentUser?.name || '',\n\t\t\t\t\t\t// @ts-expect-error - avatar_urls is not typed in User\n\t\t\t\t\t\tavatar_urls: currentUser?.avatar_urls || {},\n\t\t\t\t\t},\n\t\t\t\t\tmodified: new Date(),\n\t\t\t\t};\n\n\t\t\t\t_modifiedRevisions.unshift( unsavedRevision );\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t_query.per_page &&\n\t\t\t\t_query.page === Math.ceil( revisionsCount / _query.per_page )\n\t\t\t) {\n\t\t\t\t// Adds an item for the default theme styles.\n\t\t\t\t_modifiedRevisions.push( {\n\t\t\t\t\tid: 'parent',\n\t\t\t\t\tstyles: {},\n\t\t\t\t\tsettings: {},\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\trevisions: _modifiedRevisions,\n\t\t\thasUnsavedChanges: isDirty,\n\t\t\tisLoading: false,\n\t\t\trevisionsCount,\n\t\t};\n\t}, [\n\t\tisDirty,\n\t\trevisions,\n\t\tcurrentUser,\n\t\tauthors,\n\t\tuserConfig,\n\t\tisLoadingGlobalStylesRevisions,\n\t\trevisionsCount,\n\t\t_query.page,\n\t\t_query.per_page,\n\t] );\n}\n"],
  "mappings": ";AAGA,SAAS,iBAAiB;AAC1B;AAAA,EACC,SAAS;AAAA,OAEH;AACP,SAAS,YAAY,eAAe;AAKpC,SAAS,2BAA2B;AAuBpC,IAAM,4BAA4B;AAAA,EACjC,UAAU;AAAA,EACV,SAAS;AAAA,EACT,SAAS;AAAA,EACT,cAAc,CAAE,oBAAqB;AACtC;AACA,IAAM,gBAAgB,EAAE,UAAU,KAAK,MAAM,EAAE;AAC/C,IAAM,cAAkB,CAAC;AAEV,SAAR,yBAA2C;AAAA,EACjD;AACD,IAAoC,CAAC,GAAoC;AACxE,QAAM,EAAE,MAAM,WAAW,IAAI,WAAY,mBAAoB;AAC7D,QAAM,SAAgB;AAAA,IACrB,OAAQ,EAAE,GAAG,eAAe,GAAG,MAAM;AAAA,IACrC,CAAE,KAAM;AAAA,EACT;AACA,QAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,IAAI;AAAA,IACH,CAAE,WAAY;AACb,YAAM;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD,IAAI,OAAQ,SAAU;AACtB,YAAM,qBACL,oCAAoC,KAAK,CAAC;AAC3C,YAAM,eAAe,eAAe;AACpC,YAAM,WAAW,mBAAmB,SAAS;AAC7C,YAAM,iBAAiB,uCAAuC;AAC9D,YAAM,eAAe,iBAClB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACA,IACA;AACH,YAAM;AAAA;AAAA,QAEL,cAAc,SAAU,iBAAkB,IAAK,CAAE,GAAG,SAAS;AAAA;AAE9D,YAAM,wBAAuC,iBAC1C;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACA,KAAK,cACL;AAEH,YAAM,WACL,SAAU,yBAA0B,KAAK;AAC1C,YAAM,eAAe,iBAClB,YAAa,gBAAgB;AAAA,QAC7B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACA,CAAE,IACF;AACH,aAAO;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,QACb,SAAS;AAAA,QACT,WAAW;AAAA,QACX,gCAAgC;AAAA,QAChC,gBAAgB;AAAA,MACjB;AAAA,IACD;AAAA,IACA,CAAE,MAAO;AAAA,EACV;AACA,SAAO,QAAS,MAAsC;AACrD,QAAK,CAAE,QAAQ,UAAU,gCAAiC;AACzD,aAAO;AAAA,QACN,WAAW;AAAA,QACX,mBAAmB;AAAA,QACnB,WAAW;AAAA,QACX;AAAA,MACD;AAAA,IACD;AAGA,UAAM,qBAAiC,UAAU,IAAK,CAAE,aAAc;AACrE,aAAO;AAAA,QACN,GAAG;AAAA,QACH,QAAQ,QAAQ;AAAA,UACf,CAAE,WAAY,OAAO,OAAO,SAAS;AAAA,QACtC;AAAA,MACD;AAAA,IACD,CAAE;AAEF,UAAM,wBAAwB,UAAU;AAExC,QAAK,uBAAwB;AAE5B,UACC,mBAAoB,CAAE,EAAE,OAAO,aAC/B,OAAO,SAAS,GACf;AACD,2BAAoB,CAAE,EAAE,WAAW;AAAA,MACpC;AAGA,UACC,WACA,cACA,OAAO,KAAM,UAAW,EAAE,SAAS,KACnC,eACA,OAAO,SAAS,GACf;AACD,cAAM,kBAA4B;AAAA,UACjC,IAAI;AAAA,UACJ,QAAQ,YAAY;AAAA,UACpB,UAAU,YAAY;AAAA,UACtB,QAAQ,YAAY;AAAA,UACpB,QAAQ;AAAA,YACP,MAAM,aAAa,QAAQ;AAAA;AAAA,YAE3B,aAAa,aAAa,eAAe,CAAC;AAAA,UAC3C;AAAA,UACA,UAAU,oBAAI,KAAK;AAAA,QACpB;AAEA,2BAAmB,QAAS,eAAgB;AAAA,MAC7C;AAEA,UACC,OAAO,YACP,OAAO,SAAS,KAAK,KAAM,iBAAiB,OAAO,QAAS,GAC3D;AAED,2BAAmB,KAAM;AAAA,UACxB,IAAI;AAAA,UACJ,QAAQ,CAAC;AAAA,UACT,UAAU,CAAC;AAAA,QACZ,CAAE;AAAA,MACH;AAAA,IACD;AAEA,WAAO;AAAA,MACN,WAAW;AAAA,MACX,mBAAmB;AAAA,MACnB,WAAW;AAAA,MACX;AAAA,IACD;AAAA,EACD,GAAG;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,OAAO;AAAA,EACR,CAAE;AACH;",
  "names": []
}
