Skip to content

Commit

Permalink
Move all of the test webviews and commands behind an env var (#886)
Browse files Browse the repository at this point in the history
  • Loading branch information
lyonsil authored May 3, 2024
1 parent 7d3bf42 commit 26e6f1b
Show file tree
Hide file tree
Showing 28 changed files with 425 additions and 525 deletions.
3 changes: 2 additions & 1 deletion .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@
"skipFiles": ["<node_internals>/**"],
"env": {
"MAIN_ARGS": "--inspect=5858 --remote-debugging-port=9223",
"IN_VSCODE": "true"
"IN_VSCODE": "true",
"DEV_NOISY": "false"
}
},
{
Expand Down
25 changes: 15 additions & 10 deletions c-sharp/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,22 +23,27 @@ public static async Task Main()
return;
}

var tdp = new TimeDataProvider(papi);
var sdp = new UsfmDataProvider(papi, "assets", "WEB");
var paratextProjects = new LocalParatextProjects();
var paratextFactory = new ParatextProjectDataProviderFactory(papi, paratextProjects);

// Higher priority tasks
await Task.WhenAll(sdp.RegisterDataProvider(), paratextFactory.Initialize());

// Lower priority tasks
await Task.WhenAll(
tdp.RegisterDataProvider(),
//TODO: Delete this once we stop including test objects in the builds
papi.RegisterRequestHandler("command:test.addOne", RequestAddOne)
);
// Things that only run in our "noisy dev mode" go here
var noisyDevModeEnvVar = Environment.GetEnvironmentVariable("DEV_NOISY");
var isNoisyDevMode = noisyDevModeEnvVar != null && noisyDevModeEnvVar == "true";
if (isNoisyDevMode)
{
var tdp = new TimeDataProvider(papi);
await Task.WhenAll(
tdp.RegisterDataProvider(),
//TODO: Delete this once we stop including test objects in the builds
papi.RegisterRequestHandler("command:test.addOne", RequestAddOne)
);
}

Console.WriteLine("Paranext data provider ready!");
Console.WriteLine(
$"Paranext data provider ready! {(isNoisyDevMode ? " (noisy dev mode)" : "")}"
);
await papi.MessageHandlingCompleteTask;
Console.WriteLine("Paranext data provider message handling complete");
}
Expand Down
7 changes: 2 additions & 5 deletions extensions/src/hello-someone/manifest.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "hello-someone",
"name": "helloSomeone",
"version": "0.0.1",
"description": "Simple hello someone extension for Platform.Bible",
"author": "Paranext",
Expand All @@ -10,8 +10,5 @@
"settings": "contributions/settings.json",
"projectSettings": "contributions/projectSettings.json",
"localizedStrings": "contributions/localizedStrings.json",
"activationEvents": [
"onCommand:helloSomeone.helloSomeone",
"onCommand:helloSomeone.echoSomeoneRenderer"
]
"activationEvents": ["onCommand:helloSomeone.helloSomeone"]
}
13 changes: 0 additions & 13 deletions extensions/src/hello-someone/src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -303,18 +303,6 @@ export async function activate(context: ExecutionActivationContext): Promise<voi
},
);

const echoSomeoneRendererPromise = papi.commands.registerCommand(
'helloSomeone.echoSomeoneRenderer',
async (message: string) => {
return `echoSomeoneRenderer: ${await papi.commands.sendCommand(
'test.addThree',
2,
4,
6,
)}! ${message}`;
},
);

// Create a webview or get the existing webview if ours already exists
// Note: here, we are storing a created webview's id when we create it, and using that id on
// `existingId` to look specifically for the webview that we previously created if we have ever
Expand Down Expand Up @@ -355,7 +343,6 @@ export async function activate(context: ExecutionActivationContext): Promise<voi
await peopleWebViewProviderPromise,
await emotionTestWebViewProviderPromise,
await helloSomeoneCommandPromise,
await echoSomeoneRendererPromise,
papi.webViews.onDidAddWebView((addWebViewEvent) => {
if (addWebViewEvent.webView.webViewType === peopleWebViewType)
logger.info(
Expand Down
1 change: 0 additions & 1 deletion extensions/src/hello-someone/src/types/hello-someone.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ declare module 'papi-shared-types' {

export interface CommandHandlers {
'helloSomeone.helloSomeone': (name: string) => string;
'helloSomeone.echoSomeoneRenderer': (message: string) => Promise<string>;
}

export interface DataProviders {
Expand Down
2 changes: 1 addition & 1 deletion extensions/src/hello-world/contributions/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
{
"label": "%settings_hello_world_group1_label%",
"properties": {
"hello-world.personName": {
"helloWorld.personName": {
"label": "%settings_hello_world_personName_label%",
"default": "Bill"
}
Expand Down
4 changes: 2 additions & 2 deletions extensions/src/hello-world/src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ const reactWebViewProvider: IWebViewProviderWithType = {
`${this.webViewType} provider received request to provide a ${savedWebView.webViewType} web view`,
);
return {
iconUrl: 'papi-extension://hello-world/assets/offline.svg',
iconUrl: 'papi-extension://helloWorld/assets/offline.svg',
title: 'Hello World React',
...savedWebView,
content: helloWorldReactWebView,
Expand Down Expand Up @@ -191,7 +191,7 @@ export async function activate(context: ExecutionActivationContext): Promise<voi
);

const helloWorldPersonNamePromise = papi.settings.registerValidator(
'hello-world.personName',
'helloWorld.personName',
async (newValue) => typeof newValue === 'string',
);

Expand Down
2 changes: 1 addition & 1 deletion extensions/src/hello-world/src/types/hello-world.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,6 @@ declare module 'papi-shared-types' {

export interface SettingTypes {
/** Selected Person's Name on Hello World Web View */
'hello-world.personName': string;
'helloWorld.personName': string;
}
}
39 changes: 5 additions & 34 deletions extensions/src/hello-world/src/web-views/hello-world.web-view.html
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html>
<head>
<style>
Expand All @@ -10,21 +10,20 @@
<body>
<div class="title">Hello World!!</div>
<div><button id="hello-world" type="button">Hello World 0</button></div>
<div><button id="echo-renderer" type="button">Echo Renderer</button></div>
<div id="echo-renderer-output"></div>
<div><button id="hello-someone" type="button">Hello Someone</button></div>
<div id="hello-someone-output"></div>
<div id="root"></div>
<!-- Test the papi-extension protocol in a webView -->
<img
src="papi-extension://quick-verse/assets/letter-q.png"
src="papi-extension://quickVerse/assets/letter-q.png"
alt="Q icon"
style="max-height: 25px; max-width: 25px"
/>
<script>
// Test React component to render in the root
const { createElement, useCallback, useState } = require('react');
const { usePromise, useEvent } = require('platform-bible-react');
const { htmlEncode } = require('platform-bible-utils');
const papi = require('@papi/frontend');
const { logger } = require('@papi/frontend');

Expand All @@ -44,14 +43,6 @@
useCallback(({ times }) => setClicks(times), []),
);

const [echoResult] = usePromise(
useCallback(async () => {
await new Promise((resolve) => setTimeout(() => resolve(), 3000));
return papi.commands.sendCommand('test.echoRenderer', `From ${NAME}`);
}, []),
'retrieving',
);

return createElement(
'div',
null,
Expand All @@ -71,7 +62,6 @@
clicks,
),
),
createElement('div', null, echoResult),
);
}

Expand All @@ -84,7 +74,7 @@
function updateHelloWorldClicks(clicks) {
helloWorldClicks = clicks;
const helloWorldButton = document.getElementById('hello-world');
helloWorldButton.textContent = papi.utils.htmlEncode(`Hello World ${helloWorldClicks}`);
helloWorldButton.textContent = htmlEncode(`Hello World ${helloWorldClicks}`);
}

// Update the clicks when we are informed helloWorld has been run
Expand All @@ -102,33 +92,14 @@
updateHelloWorldClicks(helloWorldClicks + 1);
});

// Attach handler for echo-renderer
const echoRendererButton = document.getElementById('echo-renderer');
echoRendererButton.addEventListener('click', () =>
papi.commands
.sendCommand('test.echoRenderer', 'From Hello World WebView')
.then((message) => {
const echoRendererOutput = document.getElementById('echo-renderer-output');
echoRendererOutput.textContent = papi.utils.htmlEncode(message);
print(message);
}),
);
echoRendererButton.addEventListener('contextmenu', (e) => {
e.preventDefault();
const promises = new Array(10000);
for (let i = 0; i < 10000; i += 1)
promises[i] = papi.commands.sendCommand('echoRenderer', 'From Hello World WebView');
Promise.all(promises).then(() => print('Done'));
});

// Attach handler for hello-someone
const helloSomeoneButton = document.getElementById('hello-someone');
helloSomeoneButton.addEventListener('click', () =>
papi.commands
.sendCommand('helloSomeone.helloSomeone', "'Hello World WebView'")
.then((message) => {
const helloSomeoneOutput = document.getElementById('hello-someone-output');
helloSomeoneOutput.textContent = papi.utils.htmlEncode(message);
helloSomeoneOutput.textContent = htmlEncode(message);
print(message);
}),
);
Expand Down
19 changes: 4 additions & 15 deletions extensions/src/hello-world/src/web-views/hello-world.web-view.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -89,16 +89,6 @@ globalThis.webViewComponent = function HelloWorld({
updateWebViewDefinition({ title: `Hello World ${clicks}` });
}, [getWebViewDefinitionUpdatableProperties, updateWebViewDefinition, clicks]);

const [echoResult] = usePromise(
useCallback(async () => {
// Not using the promise's resolved value
// eslint-disable-next-line no-promise-executor-return
await new Promise<void>((resolve) => setTimeout(() => resolve(), 3000));
return papi.commands.sendCommand('test.echoRenderer', `From ${NAME}`);
}, []),
'retrieving',
);

const [project, setProject] = useWebViewState<string>('project', '');

const currentRender = useRef(-1);
Expand All @@ -110,7 +100,7 @@ globalThis.webViewComponent = function HelloWorld({
// testing below to make sure `useDialogCallback` returns the same callback every time
{
prompt: `Please select a Scripture project for Hello World WebView: (Render ${currentRender.current})`,
iconUrl: 'papi-extension://hello-world/assets/offline.svg',
iconUrl: 'papi-extension://helloWorld/assets/offline.svg',
title: 'Select Hello World Project',
maximumOpenDialogs: 2,
// Test ref parameter properly getting latest value
Expand Down Expand Up @@ -158,7 +148,7 @@ globalThis.webViewComponent = function HelloWorld({
useMemo(
() => ({
prompt: 'Please select one or more Scripture projects for Hello World WebView:',
iconUrl: 'papi-extension://hello-world/assets/offline.svg',
iconUrl: 'papi-extension://helloWorld/assets/offline.svg',
title: 'Select List of Hello World Projects',
selectedProjectIds: projects,
includeProjectTypes: '^ParatextStandard$',
Expand All @@ -173,7 +163,7 @@ globalThis.webViewComponent = function HelloWorld({
),
);

const [name, setNameInternal] = useSetting('hello-world.personName', 'Kathy');
const [name, setNameInternal] = useSetting('helloWorld.personName', 'Kathy');

// Name used for display and editing in the input field while debouncing the actual setting change
const [nameTemp, setNameTemp] = useState(name);
Expand Down Expand Up @@ -222,7 +212,7 @@ globalThis.webViewComponent = function HelloWorld({
const [localizedString] = usePromise(
useCallback(() => {
return papi.localization.getLocalizedString({
localizeKey: 'submitButton',
localizeKey: '%submitButton%',
locales: ['fr', 'en'],
});
}, []),
Expand Down Expand Up @@ -253,7 +243,6 @@ globalThis.webViewComponent = function HelloWorld({
Hello World {clicks}
</Button>
</div>
<div>{echoResult}</div>
<div>
<Button
onClick={() => {
Expand Down
17 changes: 8 additions & 9 deletions lib/papi-dts/papi.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -441,6 +441,8 @@ declare module 'shared/global-this.model' {
* ```
*/
var updateWebViewDefinition: UpdateWebViewDefinition;
/** Indicates whether test code meant just for developers to see should be run */
var isNoisyDevModeEnabled: boolean;
}
/** Type of Paranext process */
export enum ProcessType {
Expand Down Expand Up @@ -2242,7 +2244,6 @@ declare module 'papi-shared-types' {
*/
interface CommandHandlers {
'test.echo': (message: string) => string;
'test.echoRenderer': (message: string) => Promise<string>;
'test.echoExtensionHost': (message: string) => Promise<string>;
'test.throwError': (message: string) => void;
'platform.restartExtensionHost': () => Promise<void>;
Expand Down Expand Up @@ -2591,14 +2592,6 @@ declare module 'papi-shared-types' {
declare module 'shared/services/command.service' {
import { UnsubscriberAsync } from 'platform-bible-utils';
import { CommandHandlers, CommandNames } from 'papi-shared-types';
module 'papi-shared-types' {
interface CommandHandlers {
'test.addThree': typeof addThree;
'test.squareAndConcat': typeof squareAndConcat;
}
}
function addThree(a: number, b: number, c: number): Promise<number>;
function squareAndConcat(a: number, b: string): Promise<string>;
/** Sets up the CommandService. Only runs once and always returns the same promise after that */
export const initialize: () => Promise<void>;
/** Send a command to the backend. */
Expand Down Expand Up @@ -4459,6 +4452,12 @@ declare module 'node/utils/util' {
* @returns One uri that combines the uri and the paths in left-to-right order
*/
export function joinUriPaths(uri: Uri, ...paths: string[]): Uri;
/**
* Determines if running in noisy dev mode
*
* @returns True if the process is running in noisy dev mode, false otherwise
*/
export const isNoisyDevModeEnvVariableSet: () => boolean;
}
declare module 'node/services/node-file-system.service' {
/** File system calls from Node */
Expand Down
1 change: 0 additions & 1 deletion src/declarations/papi-shared-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ declare module 'papi-shared-types' {
// These commands are provided in `main.ts`. They are only here because I needed them to use in
// other places, but building `papi-dts` wasn't working because it didn't see `main.ts`
'test.echo': (message: string) => string;
'test.echoRenderer': (message: string) => Promise<string>;
'test.echoExtensionHost': (message: string) => Promise<string>;
'test.throwError': (message: string) => void;
'platform.restartExtensionHost': () => Promise<void>;
Expand Down
Loading

0 comments on commit 26e6f1b

Please sign in to comment.