Skip to content

Commit 3855f41

Browse files
committed
Track import/export actions
1 parent 9d4111c commit 3855f41

7 files changed

Lines changed: 38 additions & 11 deletions

File tree

packages/core/src/components/ExportImportMenu/items/ExportConfigsList.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,19 @@ import { MenuItemButton } from "@core/components/Menu/MenuItemButton";
22
import { downloadConfigTarget, ExportTargets } from "@core/stores/config";
33
import { objectEntries } from "@core/utils/object/objectEntries";
44

5-
export function ExportConfigsList() {
5+
export type ExportConfigsListProps = {
6+
onClick?: (exportTarget: string) => void;
7+
};
8+
9+
export function ExportConfigsList({ onClick }: ExportConfigsListProps) {
610
return objectEntries(ExportTargets).map(([exportTarget, config]) => (
711
<MenuItemButton
812
key={exportTarget}
913
value={exportTarget}
10-
onClick={() => downloadConfigTarget(exportTarget)}
14+
onClick={() => {
15+
downloadConfigTarget(exportTarget);
16+
onClick?.(exportTarget);
17+
}}
1118
>
1219
{config.name}
1320
</MenuItemButton>

packages/core/src/components/ExportImportMenu/items/PasteWebAppUrl.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,10 @@ import styles from "./PasteWebAppUrl.module.css";
1919

2020
export type ActionPasteUrlProps = Omit<ListItemProps<"button">, "as"> & {
2121
value: string;
22+
onPaste?: (data: string) => void;
2223
};
2324

24-
export function PasteWebAppUrl({ value, ...restProps }: ActionPasteUrlProps) {
25+
export function PasteWebAppUrl({ value, onPaste, ...restProps }: ActionPasteUrlProps) {
2526
const api = useMenuApi();
2627
const inputRef = useRef<HTMLInputElement>(null);
2728
const [isPasting, setIsPasting] = useState(false);
@@ -47,6 +48,7 @@ export function PasteWebAppUrl({ value, ...restProps }: ActionPasteUrlProps) {
4748
setHasError(!updated);
4849
if (updated) {
4950
api.setOpen(false);
51+
onPaste?.(pastedData);
5052
}
5153
},
5254
[isPasting],

packages/core/src/components/ExportImportMenu/items/UploadConfig.tsx

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,11 @@ export async function handleFileUpload(e: ChangeEvent<HTMLInputElement>) {
2323
}
2424
}
2525

26-
export function UploadConfig() {
26+
type UploadConfigProps = {
27+
onClick?: VoidFunction;
28+
};
29+
30+
export function UploadConfig({ onClick }: UploadConfigProps) {
2731
const api = useMenuApi();
2832
const { fileInput, triggerUpload } = useFileUploader({
2933
accept: ".json",
@@ -32,9 +36,13 @@ export function UploadConfig() {
3236
return (
3337
<ListItem
3438
as="button"
35-
{...mergeProps(api.getItemProps({ value: "upload-harmonizer-config" }), {
36-
onClick: triggerUpload,
37-
})}
39+
{...mergeProps(
40+
api.getItemProps({ value: "upload-harmonizer-config" }),
41+
{
42+
onClick: triggerUpload,
43+
},
44+
{ onClick },
45+
)}
3846
>
3947
{fileInput}
4048
<ListItemContent>Upload Harmonizer config</ListItemContent>

packages/core/src/components/FileInputButton/useFileUploader.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ const HiddenFileInput = memo(function HiddenFileInput({
2020
accept={accept}
2121
multiple={multiple}
2222
onChange={onFilesChange}
23+
onClick={(e) => e.stopPropagation()}
2324
className="sr-only"
2425
type="file"
2526
aria-hidden="true"

packages/web-app/src/components/FigmaPluginBanner/FigmaPluginBanner.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { trackEvent } from "@web-app/plausible";
2+
13
import { BgMode } from "@core/components/BgMode/BgMode";
24
import { Button } from "@core/components/Button/Button";
35
import { MCross } from "@core/components/Icon/MCross";
@@ -20,6 +22,7 @@ export function FigmaPluginBanner() {
2022
kind="primary"
2123
href={HARMONIZER_FIGMA_PLUGIN_URL}
2224
target="_blank"
25+
onClick={() => trackEvent("Figma Banner: Follow")}
2326
>
2427
<img src={logoImage} alt="Harmonizer Logo" className={styles.logo} />
2528
Check out Harmonizer Figma Plugin
@@ -31,6 +34,7 @@ export function FigmaPluginBanner() {
3134
icon={<MCross />}
3235
aria-label="Close banner"
3336
onClick={() => $isBannerClosed.set(true)}
37+
onClickCapture={() => trackEvent("Figma Banner: Close")}
3438
/>
3539
</div>
3640
</BgMode>

packages/web-app/src/components/WebAppActions/WebAppActions.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { useCallback, useState } from "react";
22

3+
import { trackEvent } from "@web-app/plausible";
4+
35
import { Button } from "@core/components/Button/Button";
46
import { ExportImportMenu } from "@core/components/ExportImportMenu/ExportImportMenu";
57
import { ExportConfigsList } from "@core/components/ExportImportMenu/items/ExportConfigsList";
@@ -38,12 +40,14 @@ export function WebAppActions() {
3840
<CopyPermantentUrlButton />
3941
<ExportImportMenu>
4042
<MenuItemGroup id="menu-group-upload" label="Import">
41-
<PasteWebAppUrl value="paste-url" />
42-
<UploadConfig />
43+
<PasteWebAppUrl value="paste-url" onPaste={() => trackEvent("Imported: URL Pasted")} />
44+
<UploadConfig onClick={() => trackEvent("Imported: Config uploaded")} />
4345
</MenuItemGroup>
4446
<MenuItemSeparator />
4547
<MenuItemGroup id="menu-group-export" label="Export">
46-
<ExportConfigsList />
48+
<ExportConfigsList
49+
onClick={(exportTarget) => trackEvent("Exported", { props: { exportTarget } })}
50+
/>
4751
</MenuItemGroup>
4852
</ExportImportMenu>
4953
</>

packages/web-app/tsconfig.app.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212

1313
"baseUrl": ".",
1414
"paths": {
15-
"@core/*": ["../core/src/*"]
15+
"@core/*": ["../core/src/*"],
16+
"@web-app/*": ["src/*"]
1617
}
1718
},
1819
"include": ["src"]

0 commit comments

Comments
 (0)