5180 fichiers 38.5 Mo 0 téléchargements 552 vues mis à jour il y a 8 heures ui
nitro-v36-with-renderer-v36 / src / components / catalog / views / page / layout / catalogLayoutRegistry.ts
catalogLayoutRegistry.ts 8.1 Ko Télécharger le fichier
export type CatalogLayoutRenderer =
    | 'badgeDisplay'
    | 'buildersClubBuy'
    | 'clubGifts'
    | 'collectibles'
    | 'colorGrouping'
    | 'default'
    | 'frontpage'
    | 'guildCustomFurni'
    | 'guildForum'
    | 'guildFrontpage'
    | 'info'
    | 'infoLoyalty'
    | 'infoDuckets'
    | 'infoRentables'
    | 'recyclerInfo'
    | 'monkey'
    | 'marketplaceOwnItems'
    | 'marketplacePublicItems'
    | 'petCustomization'
    | 'pets'
    | 'pets2'
    | 'pets3'
    | 'roomAds'
    | 'recolorableFurniture'
    | 'roomBundle'
    | 'recycler'
    | 'recyclerPrizes'
    | 'singleBundle'
    | 'soundMachine'
    | 'spaces'
    | 'soldLimited'
    | 'trophies'
    | 'unavailable'
    | 'vipBuy';

export type CatalogLayoutAvailability = 'ready' | 'planned';

export interface CatalogLayoutDefinition {
    availability: CatalogLayoutAvailability;
    renderer: CatalogLayoutRenderer;
    runtimeCodes: readonly string[];
    studioCode?: string;
}

export const CATALOG_LAYOUT_REGISTRY = [
    { studioCode: 'default_3x3', runtimeCodes: ['default_3x3'], renderer: 'default', availability: 'ready' },
    { studioCode: 'club_buy', runtimeCodes: ['club_buy'], renderer: 'vipBuy', availability: 'ready' },
    { studioCode: 'club_gift', runtimeCodes: ['club_gifts', 'club_gift'], renderer: 'clubGifts', availability: 'ready' },
    { studioCode: 'frontpage', runtimeCodes: ['frontpage4', 'frontpage'], renderer: 'frontpage', availability: 'ready' },
    { studioCode: 'pets', runtimeCodes: ['pets'], renderer: 'pets', availability: 'ready' },
    { studioCode: 'pets2', runtimeCodes: ['pets2'], renderer: 'pets2', availability: 'ready' },
    { studioCode: 'pets3', runtimeCodes: ['pets3'], renderer: 'pets3', availability: 'ready' },
    { studioCode: 'spaces_new', runtimeCodes: ['spaces_new'], renderer: 'spaces', availability: 'ready' },
    { studioCode: 'spaces', runtimeCodes: ['spaces'], renderer: 'spaces', availability: 'ready' },
    { studioCode: 'soundmachine', runtimeCodes: ['soundmachine'], renderer: 'soundMachine', availability: 'ready' },
    { studioCode: 'trophies', runtimeCodes: ['trophies'], renderer: 'trophies', availability: 'ready' },
    { studioCode: 'roomads', runtimeCodes: ['roomads'], renderer: 'roomAds', availability: 'ready' },
    { studioCode: 'guilds', runtimeCodes: ['guild_frontpage', 'guilds'], renderer: 'guildFrontpage', availability: 'ready' },
    { studioCode: 'guild_forum', runtimeCodes: ['guild_forum'], renderer: 'guildForum', availability: 'ready' },
    { studioCode: 'guild_furni', runtimeCodes: ['guild_custom_furni', 'guild_furni'], renderer: 'guildCustomFurni', availability: 'ready' },
    { studioCode: 'vip_buy', runtimeCodes: ['vip_buy'], renderer: 'vipBuy', availability: 'ready' },
    { studioCode: 'builders_club_frontpage', runtimeCodes: ['builders_club_frontpage'], renderer: 'buildersClubBuy', availability: 'ready' },
    { studioCode: 'builders_club_addons', runtimeCodes: ['builders_club_addons'], renderer: 'buildersClubBuy', availability: 'ready' },
    { studioCode: 'builders_club_loyalty', runtimeCodes: ['builders_club_loyalty'], renderer: 'buildersClubBuy', availability: 'ready' },
    { studioCode: 'marketplace', runtimeCodes: ['marketplace'], renderer: 'marketplacePublicItems', availability: 'ready' },
    { studioCode: 'marketplace_own_items', runtimeCodes: ['marketplace_own_items'], renderer: 'marketplaceOwnItems', availability: 'ready' },
    { studioCode: 'recycler', runtimeCodes: ['recycler'], renderer: 'recycler', availability: 'ready' },
    { studioCode: 'recycler_info', runtimeCodes: ['recycler_info', 'info_recycler'], renderer: 'recyclerInfo', availability: 'ready' },
    { studioCode: 'recycler_prizes', runtimeCodes: ['recycler_prizes'], renderer: 'recyclerPrizes', availability: 'ready' },
    { studioCode: 'info_loyalty', runtimeCodes: ['info_loyalty'], renderer: 'infoLoyalty', availability: 'ready' },
    { studioCode: 'info_duckets', runtimeCodes: ['info_duckets'], renderer: 'infoDuckets', availability: 'ready' },
    { studioCode: 'info_rentables', runtimeCodes: ['info_rentables'], renderer: 'infoRentables', availability: 'ready' },
    { studioCode: 'info_pets', runtimeCodes: ['info_pets'], renderer: 'info', availability: 'ready' },
    { studioCode: 'loyalty_vip_buy', runtimeCodes: ['loyalty_vip_buy'], renderer: 'vipBuy', availability: 'ready' },
    { studioCode: 'badge_display', runtimeCodes: ['badge_display'], renderer: 'badgeDisplay', availability: 'ready' },
    { studioCode: 'bots', runtimeCodes: ['bots'], renderer: 'default', availability: 'ready' },
    { studioCode: 'single_bundle', runtimeCodes: ['single_bundle'], renderer: 'singleBundle', availability: 'ready' },
    { studioCode: 'sold_ltd_items', runtimeCodes: ['sold_ltd_items'], renderer: 'soldLimited', availability: 'ready' },
    { studioCode: 'plasto', runtimeCodes: ['plasto'], renderer: 'default', availability: 'ready' },
    { studioCode: 'default_3x3_color_grouping', runtimeCodes: ['default_3x3_color_grouping'], renderer: 'colorGrouping', availability: 'ready' },
    { studioCode: 'recent_purchases', runtimeCodes: ['recent_purchases'], renderer: 'default', availability: 'ready' },
    { studioCode: 'room_bundle', runtimeCodes: ['room_bundle'], renderer: 'roomBundle', availability: 'ready' },
    { studioCode: 'petcustomization', runtimeCodes: ['petcustomization'], renderer: 'petCustomization', availability: 'ready' },
    { studioCode: 'frontpage_featured', runtimeCodes: ['frontpage_featured'], renderer: 'frontpage', availability: 'ready' },
    { studioCode: 'root', runtimeCodes: ['root'], renderer: 'default', availability: 'ready' },
    { studioCode: 'monkey', runtimeCodes: ['monkey'], renderer: 'monkey', availability: 'ready' },
    { studioCode: 'niko', runtimeCodes: ['niko'], renderer: 'info', availability: 'ready' },
    { studioCode: 'mad_money', runtimeCodes: ['mad_money'], renderer: 'info', availability: 'ready' },
    { studioCode: 'productpage1', runtimeCodes: ['productpage1'], renderer: 'default', availability: 'ready' },
    { studioCode: 'collectibles', runtimeCodes: ['collectibles'], renderer: 'collectibles', availability: 'ready' },
    { studioCode: 'recolorable_furniture', runtimeCodes: ['recolorable_furniture'], renderer: 'recolorableFurniture', availability: 'ready' },
    { runtimeCodes: ['default_3x3_extrainfo'], renderer: 'default', availability: 'ready' },
    { runtimeCodes: ['pixeleffects'], renderer: 'info', availability: 'ready' }
] as const satisfies readonly CatalogLayoutDefinition[];

type CatalogLayoutRegistryEntry = (typeof CATALOG_LAYOUT_REGISTRY)[number];

export type CatalogStudioLayoutCode = CatalogLayoutRegistryEntry extends infer Definition
    ? Definition extends { readonly studioCode: infer Code extends string }
        ? Code
        : never
    : never;

const hasStudioCode = (definition: CatalogLayoutDefinition): definition is CatalogLayoutDefinition & { studioCode: CatalogStudioLayoutCode } =>
    typeof definition.studioCode === 'string';

export const CATALOG_STUDIO_LAYOUT_CODES = (CATALOG_LAYOUT_REGISTRY as readonly CatalogLayoutDefinition[])
    .filter(hasStudioCode)
    .map((definition) => definition.studioCode);

const runtimeDefinitions = new Map<string, CatalogLayoutDefinition>();

for (const definition of CATALOG_LAYOUT_REGISTRY) {
    for (const runtimeCode of definition.runtimeCodes) {
        const current = runtimeDefinitions.get(runtimeCode);

        if (current && current.renderer !== definition.renderer) {
            throw new Error(`Catalog layout ${runtimeCode} has conflicting renderers.`);
        }

        runtimeDefinitions.set(runtimeCode, definition);
    }
}

const studioCodes = new Set<string>(CATALOG_STUDIO_LAYOUT_CODES);

export const getCatalogLayoutDefinition = (runtimeCode: string): CatalogLayoutDefinition | null => runtimeDefinitions.get(runtimeCode) ?? null;

export const isCatalogStudioLayoutCode = (value: string): value is CatalogStudioLayoutCode => studioCodes.has(value);

const READ_ONLY_ADMIN_LAYOUTS = new Set<string>(['recent_purchases']);

export const isReadOnlyCatalogAdminLayout = (layout: string | null | undefined): boolean =>
    typeof layout === 'string' && READ_ONLY_ADMIN_LAYOUTS.has(layout);
15Sujets
1Dépôts
20Membres
4En ligne
Profile
Inscrit
Dernière visite
Messages
0
Votes positifs
0
Votes négatifs
0

Nous utilisons des cookies pour assurer le bon fonctionnement du site et améliorer votre expérience. en savoir plus

Autoriser