diff --git a/CHANGELOG.md b/CHANGELOG.md index 06960b3c..e689bd13 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ - [#520](https://github.com/estruyf/vscode-front-matter/issues/520): Add the URL protocol to the host on opening the preview if it's missing - [#521](https://github.com/estruyf/vscode-front-matter/issues/521): Fix empty snippets dashboard placeholder - [#526](https://github.com/estruyf/vscode-front-matter/issues/526): Fix card content menu +- [#531](https://github.com/estruyf/vscode-front-matter/issues/531): Fix prettier update which caused data views to not render list items ## [8.3.0] - 2023-02-14 - [Release notes](https://beta.frontmatter.codes/updates/v8.3.0) diff --git a/package-lock.json b/package-lock.json index b8f6ec3e..55c53366 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,7 +40,6 @@ "@typescript-eslint/eslint-plugin": "^5.50.0", "@typescript-eslint/parser": "^5.50.0", "@vscode/codicons": "0.0.20", - "@vscode/extension-telemetry": "^0.4.7", "@vscode/webview-ui-toolkit": "^0.9.1", "@webpack-cli/serve": "^1.6.0", "ajv": "^8.8.2", @@ -1517,14 +1516,6 @@ "dev": true, "license": "CC-BY-4.0" }, - "node_modules/@vscode/extension-telemetry": { - "version": "0.4.7", - "dev": true, - "license": "MIT", - "engines": { - "vscode": "^1.60.0" - } - }, "node_modules/@vscode/vsce": { "version": "2.17.0", "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.17.0.tgz", @@ -13940,10 +13931,6 @@ "version": "0.0.20", "dev": true }, - "@vscode/extension-telemetry": { - "version": "0.4.7", - "dev": true - }, "@vscode/vsce": { "version": "2.17.0", "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.17.0.tgz", diff --git a/package.json b/package.json index 3b9f9fe3..92e6769a 100644 --- a/package.json +++ b/package.json @@ -2314,7 +2314,6 @@ "@typescript-eslint/eslint-plugin": "^5.50.0", "@typescript-eslint/parser": "^5.50.0", "@vscode/codicons": "0.0.20", - "@vscode/extension-telemetry": "^0.4.7", "@vscode/webview-ui-toolkit": "^0.9.1", "@webpack-cli/serve": "^1.6.0", "ajv": "^8.8.2", diff --git a/src/components/uniforms-frontmatter/ListField.tsx b/src/components/uniforms-frontmatter/ListField.tsx index f9198dcd..93edafb9 100644 --- a/src/components/uniforms-frontmatter/ListField.tsx +++ b/src/components/uniforms-frontmatter/ListField.tsx @@ -7,6 +7,7 @@ import ListItemField from './ListItemField'; import './ListField.css'; import { LabelField } from './LabelField'; +import { AutoField } from 'uniforms-unstyled'; export type ListFieldProps = HTMLFieldProps< unknown[], @@ -27,14 +28,13 @@ function List({ {value?.map((item, itemIndex) => - Children.map(children as React.ReactElement[], (child: React.ReactElement, childIndex) => + Children.map(children as React.ReactElement[], (child: React.ReactElement, childIndex) => isValidElement(child) - ? cloneElement(child, { - key: `${itemIndex}-${childIndex}`, - // name: '', - // name: (child.props.name || '').replace('$', '' + itemIndex), - ...itemProps - }) + ? cloneElement(child as React.ReactElement, { + key: `${itemIndex}-${childIndex}`, + name: ((child?.props as any)?.name || "").replace('$', '' + itemIndex), + ...itemProps, + }) : child ) )} diff --git a/src/extension.ts b/src/extension.ts index e36d3eee..a2e44639 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -378,9 +378,7 @@ export async function activate(context: vscode.ExtensionContext) { console.log(`FRONT MATTER CMS activated!`); } -export function deactivate() { - Telemetry.dispose(); -} +export function deactivate() {} const handleAutoDateUpdate = (e: vscode.TextDocumentWillSaveEvent) => { Article.autoUpdate(e); diff --git a/src/helpers/Telemetry.ts b/src/helpers/Telemetry.ts index 4b891e47..56177645 100644 --- a/src/helpers/Telemetry.ts +++ b/src/helpers/Telemetry.ts @@ -1,21 +1,20 @@ -import TelemetryReporter, { - TelemetryEventMeasurements, - TelemetryEventProperties -} from '@vscode/extension-telemetry'; import { Extension, Settings } from '.'; import { EXTENSION_BETA_ID, EXTENSION_ID, SETTING_TELEMETRY_DISABLE } from '../constants'; +import fetch from 'node-fetch'; + +const METRICS_URL = 'https://frontmatter.codes/api/metrics'; export class Telemetry { private static instance: Telemetry; - private static reporter: TelemetryReporter | null = null; + private extTitle: string; + private extVersion: string; + private events: any[] = []; + private timeout: NodeJS.Timeout | undefined; private constructor() { const extension = Extension.getInstance(); - const extTitle = extension.isBetaVersion() ? EXTENSION_BETA_ID : EXTENSION_ID; - const extVersion = extension.version; - const appKey = `525037e5-70ff-4620-8e52-30e1aef8deee`; - - Telemetry.reporter = new TelemetryReporter(extTitle, extVersion, appKey); + this.extTitle = extension.isBetaVersion() ? EXTENSION_BETA_ID : EXTENSION_ID; + this.extVersion = extension.version; } public static getInstance(): Telemetry { @@ -25,24 +24,51 @@ export class Telemetry { return Telemetry.instance; } - public static send( - eventName: string, - properties?: TelemetryEventProperties, - measurements?: TelemetryEventMeasurements - ) { - if (!Telemetry.reporter) { - Telemetry.getInstance(); - } - + /** + * Send metrics to our own database + * @param eventName + * @param properties + * @returns + */ + public static send(eventName: string, properties?: any) { const isDisabled = Settings.get(SETTING_TELEMETRY_DISABLE); if (isDisabled) { return; } - Telemetry.reporter?.sendTelemetryEvent(eventName, properties, measurements); + const instance = Telemetry.getInstance(); + instance.events.push({ + name: eventName, + extName: instance.extTitle, + version: instance.extVersion, + properties + }); + + instance.debounceMetrics(); } - public static dispose() { - Telemetry.reporter?.dispose(); + /** + * Debounce the metrics by 1 second + */ + private async debounceMetrics() { + const instance = Telemetry.getInstance(); + + // Check if timeout was defined + if (instance.timeout) { + clearTimeout(instance.timeout); + } + + // Set a new timeout + instance.timeout = setTimeout(async () => { + await fetch(METRICS_URL, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(this.events) + }); + // Reset the events + this.events = []; + }, 1000); } } diff --git a/src/listeners/dashboard/TelemetryListener.ts b/src/listeners/dashboard/TelemetryListener.ts index 9d3cd93e..30c637fe 100644 --- a/src/listeners/dashboard/TelemetryListener.ts +++ b/src/listeners/dashboard/TelemetryListener.ts @@ -13,7 +13,7 @@ export class TelemetryListener extends BaseListener { switch (msg.command) { case DashboardMessage.sendTelemetry: - Telemetry.send(msg.payload.event, msg.payload.properties, msg.payload.metrics); + Telemetry.send(msg.payload.event, msg.payload.properties); break; } }