diff --git a/package.json b/package.json index 8ec9c401..43d208b6 100644 --- a/package.json +++ b/package.json @@ -4,12 +4,12 @@ "scripts": { "build": "node build.js", "watch:src": "node watch.js", - "watch:dist": "mv3-hot-reload", + "watch:dist": "node lib/mv3-hot-reload/out/bin/mv3-hot-reload.js", "dev": "concurrently yarn:watch:*", "pretty-quick": "pretty-quick", "precommit": "pretty-quick --staged", "prepare": "husky install", - "preinstall": "cd ./lib/mv3-hot-reload && yarn install && ln -s ../mv3-hot-reload/out/bin/mv3-hot-reload.js ../../node_modules/.bin/mv3-hot-reload", + "preinstall": "cd ./lib/mv3-hot-reload && yarn install", "zip": "npm-build-zip --source=dist --destination=build" }, "author": "ujiro99", diff --git a/pages/public/chrome_web_store.png b/pages/public/chrome_web_store.png new file mode 100644 index 00000000..224c12bf Binary files /dev/null and b/pages/public/chrome_web_store.png differ diff --git a/pages/public/favicon.ico b/pages/public/favicon.ico new file mode 100644 index 00000000..ae18a333 Binary files /dev/null and b/pages/public/favicon.ico differ diff --git a/pages/scripts/fetch-ga-data.js b/pages/scripts/fetch-ga-data.js index 8acce74d..015c7330 100644 --- a/pages/scripts/fetch-ga-data.js +++ b/pages/scripts/fetch-ga-data.js @@ -31,6 +31,9 @@ async function runReport() { }, ], dimensionFilter: { + orGroup: { + expressions: [ + { filter: { fieldName: 'eventName', stringFilter: { @@ -38,6 +41,27 @@ async function runReport() { matchType: 'EXACT', }, }, + }, + { + filter: { + fieldName: 'eventName', + stringFilter: { + value: 'command_hub_star_add', + matchType: 'EXACT', + }, + }, + }, + { + filter: { + fieldName: 'eventName', + stringFilter: { + value: 'command_hub_star_remove', + matchType: 'EXACT', + }, + }, + }, + ], + }, }, }) @@ -51,7 +75,43 @@ async function runReport() { return acc }, []) - fs.writeFileSync('./src/data/analytics.json', JSON.stringify(data, null, 2)) + const groupped = data.reduce( + (acc, row) => { + switch (row.eventName) { + case 'command_hub_add': + acc.download.push({ + eventId: row.eventId, + eventCount: row.eventCount, + }) + break + case 'command_hub_star_add': + const r = acc.starred.find((a) => a.eventId === row.eventId) ?? { + eventId: row.eventId, + eventCount: 0, + } + r.eventCount += row.eventCount + acc.starred = acc.starred.filter((a) => a.eventId !== row.eventId) + acc.starred.push(r) + break + case 'command_hub_star_remove': + const r2 = acc.starred.find((a) => a.eventId === row.eventId) ?? { + eventId: row.eventId, + eventCount: 0, + } + r2.eventCount -= row.eventCount + acc.starred = acc.starred.filter((a) => a.eventId !== row.eventId) + acc.starred.push(r2) + break + } + return acc + }, + { download: [], starred: [], updated: Date.now() }, + ) + + fs.writeFileSync( + './src/data/analytics.json', + JSON.stringify(groupped, null, 2), + ) } runReport().catch(console.error) diff --git a/pages/src/app/globals.css b/pages/src/app/globals.css index 020cb109..c9ad9fb2 100644 --- a/pages/src/app/globals.css +++ b/pages/src/app/globals.css @@ -72,3 +72,8 @@ body { @apply bg-background text-foreground; } } + +.starred svg { + @apply fill-amber-400; + @apply stroke-amber-400; +} diff --git a/pages/src/components/CommandForm.tsx b/pages/src/components/CommandForm.tsx index 4aea3d84..9247f8ca 100644 --- a/pages/src/components/CommandForm.tsx +++ b/pages/src/components/CommandForm.tsx @@ -93,7 +93,7 @@ const STORAGE_KEY = 'CommandShareFormData' let onChagneSearchUrlTO = 0 -type CommandMessage = Omit +type CommandMessage = Omit const toMessages = (data: FormValues) => { const msgObj = toCommand(data) @@ -276,7 +276,7 @@ function InputForm(props: InputProps) { } }, [setValue]) - form.watch((data) => { + form.watch((data: FormValues) => { if (!data.title && !data.searchUrl) { return } @@ -596,7 +596,7 @@ function InputForm(props: InputProps) { const Item = ({ label, value }: { label: string; value: string }) => (
-
+
{value}
@@ -672,7 +672,7 @@ function SendingForm() { 送信中... Uploading...

Engineer diff --git a/pages/src/components/CommandShare.tsx b/pages/src/components/CommandShare.tsx index fc09ff4c..7504a0a8 100644 --- a/pages/src/components/CommandShare.tsx +++ b/pages/src/components/CommandShare.tsx @@ -11,7 +11,7 @@ import { CommandForm } from '@/components/CommandForm' export function CommandShare(): JSX.Element { return ( - + コマンド共有 diff --git a/pages/src/components/Image.tsx b/pages/src/components/Image.tsx index 7cb637bc..a9e2e557 100644 --- a/pages/src/components/Image.tsx +++ b/pages/src/components/Image.tsx @@ -1,5 +1,6 @@ import * as React from 'react' import NextImage from 'next/image' +import { cn } from '@/lib/utils' import nextConfig from '../../next.config.mjs' const BASE_PATH = nextConfig.basePath || '' @@ -16,10 +17,10 @@ type Props = { function Image(props: Props): JSX.Element { let { src } = props if (src.startsWith('/')) { - src = `${BASE_PATH}/${props.src}` + src = `${BASE_PATH}${props.src}` return ( -
-
+
+

{cmd.title}

-

{cmd.searchUrl}

+

+ {cmd.searchUrl} +

{cmd.description}

-
-
-

+

+
+

+ +

+ +
+ - Installed -

+ {cmd.download.toLocaleString()} +
+
+
+ + {cmd.star.toLocaleString()} +
- {cmd.download}
-
    +
      {cmd.tags.map((tag) => (
    • diff --git a/pages/src/components/layout/Footer.tsx b/pages/src/components/layout/Footer.tsx index 2842f45b..a30b0243 100644 --- a/pages/src/components/layout/Footer.tsx +++ b/pages/src/components/layout/Footer.tsx @@ -1,7 +1,13 @@ +import { updated } from '@/data/analytics.json' + export function Footer(): JSX.Element { + const updatedDate = new Date(updated) return ( -