1 line
6.2 KiB
Plaintext
1 line
6.2 KiB
Plaintext
{"version":3,"file":"mock-home-Qu-AgQUK.js","sources":["../../src/pages/mock-home.jsx"],"sourcesContent":["import { useEffect, useMemo } from 'preact/hooks';\n\nimport ComposeButton from '../components/compose-button';\nimport Icon from '../components/icon';\nimport Link from '../components/link';\nimport NavMenu from '../components/nav-menu';\nimport Shortcuts from '../components/shortcuts';\nimport Status from '../components/status';\nimport mockPostsData from '../data/mock-posts.json';\nimport states from '../utils/states';\nimport useTitle from '../utils/useTitle';\n\n// Helper function to convert snake_case keys to camelCase recursively\n// This mimics the behavior of masto.js which uses change-case library\n// to transform API responses from snake_case to camelCase\nfunction toCamelCase(obj) {\n if (!obj || typeof obj !== 'object') return obj;\n if (Array.isArray(obj)) return obj.map(toCamelCase);\n\n return Object.keys(obj).reduce((acc, key) => {\n // Convert snake_case to camelCase: user_name -> userName\n const camelKey = key.replace(/_([a-z])/g, (_, letter) =>\n letter.toUpperCase(),\n );\n acc[camelKey] = toCamelCase(obj[key]);\n return acc;\n }, {});\n}\n\nconst MOCK_SHORTCUTS = [\n { type: 'following', id: 'home' },\n { type: 'notifications', id: 'notifications' },\n { type: 'search', id: 'search' },\n { type: 'bookmarks', id: 'bookmarks' },\n { type: 'trending', id: 'trending' },\n];\n\nfunction MockHome() {\n useTitle('Home', '/');\n\n useEffect(() => {\n const prevShortcuts = states.shortcuts;\n const prevViewMode = states.settings.shortcutsViewMode;\n\n states.shortcuts = MOCK_SHORTCUTS;\n states.settings.shortcutsViewMode = 'tab-menu-bar';\n\n return () => {\n states.shortcuts = prevShortcuts;\n states.settings.shortcutsViewMode = prevViewMode;\n };\n }, []);\n\n const statuses = useMemo(() => {\n const now = new Date();\n\n return mockPostsData.map((status, index) => {\n const accountURL = new URL(status.account.url);\n const instance = accountURL.hostname;\n\n // Convert all snake_case keys to camelCase\n const transformedStatus = toCamelCase(status);\n transformedStatus._instance = instance;\n\n // Mock createdAt dates: now, then 15 minutes ago, 30 minutes ago, etc.\n const minutesAgo = index * 15;\n const createdAt = new Date(now.getTime() - minutesAgo * 60 * 1000);\n transformedStatus.createdAt = createdAt.toISOString();\n\n return transformedStatus;\n });\n }, []);\n\n return (\n <>\n <div id=\"home-page\" class=\"deck-container\" tabIndex=\"-1\">\n <div class=\"timeline-deck deck\">\n <header>\n <div class=\"header-grid\">\n <div class=\"header-side\">\n <NavMenu />\n </div>\n <h1>Home</h1>\n <div class=\"header-side\">\n <Link to=\"/notifications\" class=\"button plain\">\n <Icon icon=\"notification\" size=\"l\" alt=\"Notifications\" />\n </Link>\n </div>\n </div>\n </header>\n <main>\n <ul class=\"timeline\">\n {statuses.map((status) => {\n const instance = status._instance;\n return (\n <li key={status.id} class=\"timeline-item\">\n <Status\n status={status}\n instance={instance}\n allowFilters={false}\n />\n </li>\n );\n })}\n </ul>\n </main>\n </div>\n </div>\n <ComposeButton />\n <Shortcuts />\n </>\n );\n}\n\nexport default MockHome;\n"],"names":["toCamelCase","obj","Array","isArray","map","Object","keys","reduce","acc","key","camelKey","replace","_","letter","toUpperCase","MOCK_SHORTCUTS","type","id","MockHome","useTitle","useEffect","prevShortcuts","states","shortcuts","prevViewMode","settings","shortcutsViewMode","statuses","useMemo","now","Date","mockPostsData","status","index","instance","URL","account","url","hostname","transformedStatus","_instance","minutesAgo","createdAt","getTime","toISOString","_jsxs","_Fragment","children","_jsx","class","tabIndex","NavMenu","Link","to","Icon","icon","size","alt","Status","allowFilters","ComposeButton","Shortcuts"],"mappings":"sn9BAeA,SAASA,EAAYC,EAAK,CACxB,MAAI,CAACA,GAAO,OAAOA,GAAQ,SAAiBA,EACxCC,MAAMC,QAAQF,CAAG,EAAUA,EAAIG,IAAIJ,CAAW,EAE3CK,OAAOC,KAAKL,CAAG,EAAEM,OAAO,CAACC,EAAKC,IAAQ,CAE3C,MAAMC,EAAWD,EAAIE,QAAQ,YAAa,CAACC,EAAGC,IAC5CA,EAAOC,aACT,EACAN,OAAAA,EAAIE,CAAQ,EAAIV,EAAYC,EAAIQ,CAAG,CAAC,EAC7BD,CACT,EAAG,CAAA,CAAE,CACP,CAEA,MAAMO,EAAiB,CACrB,CAAEC,KAAM,YAAaC,GAAI,MAAO,EAChC,CAAED,KAAM,gBAAiBC,GAAI,eAAgB,EAC7C,CAAED,KAAM,SAAUC,GAAI,QAAS,EAC/B,CAAED,KAAM,YAAaC,GAAI,WAAY,EACrC,CAAED,KAAM,WAAYC,GAAI,UAAW,CAAC,EAGtC,SAASC,GAAW,CAClBC,EAAS,OAAQ,GAAG,EAEpBC,EAAU,IAAM,CACd,MAAMC,EAAgBC,EAAOC,UACvBC,EAAeF,EAAOG,SAASC,kBAErCJ,OAAAA,EAAOC,UAAYR,EACnBO,EAAOG,SAASC,kBAAoB,eAE7B,IAAM,CACXJ,EAAOC,UAAYF,EACnBC,EAAOG,SAASC,kBAAoBF,CACtC,CACF,EAAG,CAAA,CAAE,EAEL,MAAMG,EAAWC,EAAQ,IAAM,CAC7B,MAAMC,MAAUC,KAEhB,OAAOC,EAAc3B,IAAI,CAAC4B,EAAQC,IAAU,CAE1C,MAAMC,EADa,IAAIC,IAAIH,EAAOI,QAAQC,GAAG,EACjBC,SAGtBC,EAAoBvC,EAAYgC,CAAM,EAC5CO,EAAkBC,UAAYN,EAG9B,MAAMO,EAAaR,EAAQ,GACrBS,EAAY,IAAIZ,KAAKD,EAAIc,UAAYF,EAAa,GAAK,GAAI,EACjEF,OAAAA,EAAkBG,UAAYA,EAAUE,YAAAA,EAEjCL,CACT,CAAC,CACH,EAAG,CAAA,CAAE,EAEL,OACEM,EAAAC,EAAA,CAAAC,UACEC,EAAA,MAAA,CAAK/B,GAAG,YAAYgC,MAAM,iBAAiBC,SAAS,KAAIH,SACtDF,EAAA,MAAA,CAAKI,MAAM,qBAAoBF,UAC7BC,EAAA,SAAA,CAAAD,SACEF,EAAA,MAAA,CAAKI,MAAM,cAAaF,UACtBC,EAAA,MAAA,CAAKC,MAAM,cAAaF,SACtBC,EAACG,EAAO,CAAA,CAAE,CAAA,CACP,EACLH,EAAA,KAAA,CAAAD,SAAI,MAAA,CAAQ,EACZC,EAAA,MAAA,CAAKC,MAAM,cAAaF,SACtBC,EAACI,EAAI,CAACC,GAAG,iBAAiBJ,MAAM,eAAcF,SAC5CC,EAACM,EAAI,CAACC,KAAK,eAAeC,KAAK,IAAIC,IAAI,eAAA,CAAiB,CAAA,CACpD,CAAA,CACH,CAAC,CAAA,CACH,CAAA,CACC,EACRT,EAAA,OAAA,CAAAD,SACEC,EAAA,KAAA,CAAIC,MAAM,WAAUF,SACjBpB,EAASvB,IAAK4B,GAAW,CACxB,MAAME,EAAWF,EAAOQ,UACxB,OACEQ,EAAA,KAAA,CAAoBC,MAAM,gBAAeF,SACvCC,EAACU,EAAM,CACL1B,OAAAA,EACAE,SAAAA,EACAyB,aAAc,EAAA,CACf,CAAA,EALM3B,EAAOf,EAMZ,CAER,CAAC,CAAA,CACC,CAAA,CACA,CAAC,CAAA,CACJ,CAAA,CACF,EACL+B,EAACY,EAAa,CAAA,CAAE,EAChBZ,EAACa,EAAS,EAAE,CAAC,CAAA,CACb,CAEN"} |