-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'main' into 742-use-localizations
- Loading branch information
Showing
42 changed files
with
1,963 additions
and
1,261 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
7 changes: 7 additions & 0 deletions
7
extensions/src/platform-scripture/src/checking-results-list.web-view.scss
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
.checking-results-list { | ||
height: 500px; | ||
} | ||
|
||
.checking-results-list-label { | ||
padding-inline-start: 10px; | ||
} |
68 changes: 68 additions & 0 deletions
68
extensions/src/platform-scripture/src/checking-results-list.web-view.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
import { WebViewProps } from '@papi/core'; | ||
import { Button, Label, ResultsSet, ScriptureResultsViewer } from 'platform-bible-react'; | ||
import { useState, useCallback, useEffect, useMemo } from 'react'; | ||
import { badLeftoversCheck, engineProblemsCheck } from './testing/test-scripture-checks'; | ||
|
||
const getLabel = ( | ||
projectName: string | undefined, | ||
datetime: string | undefined, | ||
sources: ResultsSet[], | ||
): string => { | ||
let result = ''; | ||
if (projectName) { | ||
result = projectName; | ||
} | ||
if (datetime) result += `; ${datetime}`; | ||
if (sources.length > 0) { | ||
result += '; '; | ||
result += sources | ||
.map((s) => s.source.displayName) | ||
.filter(Boolean) | ||
.join(', '); | ||
} | ||
return result; | ||
}; | ||
|
||
global.webViewComponent = function CheckingResultsListWebView({ useWebViewState }: WebViewProps) { | ||
const [projectName] = useWebViewState('projectName', 'Dummy project'); | ||
|
||
// This is stub code to get some dummy checking results. | ||
// TODO (#994): Replace this with calls to get actual check results and subscribe to updates. | ||
const onRerun = useCallback(() => { | ||
badLeftoversCheck.reRun(); | ||
engineProblemsCheck.reRun(); | ||
}, []); | ||
|
||
const sources = useMemo(() => [badLeftoversCheck, engineProblemsCheck], []); | ||
|
||
const [lastUpdateTimestamp, setLastUpdateTimestamp] = useState<string | undefined>(undefined); | ||
const [currentSources, setCurrentSources] = useState(sources); | ||
|
||
useEffect(() => { | ||
setCurrentSources(sources); | ||
}, [sources]); | ||
|
||
const handleResultsUpdated = useCallback(() => { | ||
const currentTimestamp = new Date().toLocaleString(); | ||
setLastUpdateTimestamp(currentTimestamp); | ||
}, []); | ||
|
||
const reRunChecks = useCallback(() => { | ||
if (onRerun) { | ||
onRerun(); | ||
// Since onRerun modifies the sources directly, we need to trigger a state update | ||
setCurrentSources([...sources]); | ||
handleResultsUpdated(); | ||
} | ||
}, [onRerun, sources, handleResultsUpdated]); | ||
|
||
const label = getLabel(projectName, lastUpdateTimestamp, sources); | ||
|
||
return ( | ||
<div className="checking-results-list"> | ||
<Button onClick={reRunChecks}>Rerun</Button> | ||
{label && <Label className="checking-results-list-label">{label}</Label>} | ||
<ScriptureResultsViewer sources={currentSources} /> | ||
</div> | ||
); | ||
}; |
77 changes: 77 additions & 0 deletions
77
extensions/src/platform-scripture/src/checking-results.web-view-provider.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
import papi, { logger, projectLookup } from '@papi/backend'; | ||
import { | ||
GetWebViewOptions, | ||
IWebViewProvider, | ||
SavedWebViewDefinition, | ||
WebViewDefinition, | ||
} from '@papi/core'; | ||
import checkingResultsListWebView from './checking-results-list.web-view?inline'; | ||
import checkingResultsListStyles from './checking-results-list.web-view.scss?inline'; | ||
|
||
export const checkResultsListWebViewType = 'platformScripture.checkingResults'; | ||
|
||
export interface CheckResultsWebViewOptions extends GetWebViewOptions { | ||
projectId: string | undefined; | ||
} | ||
|
||
export default class CheckResultsWebViewProvider implements IWebViewProvider { | ||
constructor(public webViewType: string = checkResultsListWebViewType) {} | ||
|
||
async getWebView( | ||
savedWebView: SavedWebViewDefinition, | ||
getWebViewOptions: CheckResultsWebViewOptions, | ||
): Promise<WebViewDefinition | undefined> { | ||
if (savedWebView.webViewType !== this.webViewType) | ||
throw new Error( | ||
`${checkResultsListWebViewType} provider received request to provide a ${savedWebView.webViewType} web view`, | ||
); | ||
|
||
// We know that the projectId (if present in the state) will be a string. | ||
let projectId = | ||
getWebViewOptions.projectId || | ||
// eslint-disable-next-line no-type-assertion/no-type-assertion | ||
(savedWebView.state?.projectId as string) || | ||
undefined; | ||
|
||
let title = await papi.localization.getLocalizedString({ | ||
localizeKey: '%webView_checkResultsList_title%', | ||
}); | ||
|
||
let projectName: string | undefined; | ||
|
||
if (projectId) { | ||
projectName = | ||
(await ( | ||
await papi.projectDataProviders.get('platform.base', projectId) | ||
).getSetting('platform.name')) ?? projectId; | ||
|
||
title += ` - ${projectName}`; | ||
} | ||
|
||
if (!projectId && globalThis.isNoisyDevModeEnabled) { | ||
logger.debug(`${title} web view did not get a project passed in. Choosing a random one...`); | ||
|
||
const projectMetadata = await projectLookup.getMetadataForAllProjects(); | ||
if (projectMetadata.length === 0) { | ||
logger.debug('Testing out checks: No projects available'); | ||
return undefined; | ||
} | ||
projectId = projectMetadata[0].id; | ||
} | ||
|
||
logger.info(`${title} web view opening with ${projectId}`); | ||
|
||
return { | ||
title, | ||
...savedWebView, | ||
content: checkingResultsListWebView, | ||
styles: checkingResultsListStyles, | ||
state: { | ||
projectName, | ||
projectId, | ||
...savedWebView.state, | ||
webViewType: this.webViewType, | ||
}, | ||
}; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,20 +1,38 @@ | ||
import { split } from 'platform-bible-utils'; | ||
|
||
export const extractCharacters = (text: string, item: string | undefined = undefined): string[] => { | ||
/** | ||
* Extracts characters from scripture text. If a target is provided, only extracts occurrences of | ||
* the provided target | ||
* | ||
* @param text The scripture text from which the characters will be extracted | ||
* @param target (Optional) If provided, the function only extracts exact matches of this character | ||
* @returns An array of characters extracted from the provided scripture text | ||
*/ | ||
export const extractCharacters = ( | ||
text: string, | ||
target: string | undefined = undefined, | ||
): string[] => { | ||
let characters: string[] = split(text, ''); | ||
if (item) characters = characters.filter((character) => character === item); | ||
if (target) characters = characters.filter((character) => character === target); | ||
return characters; | ||
}; | ||
|
||
/** | ||
* Extracts repeated words from scripture text. If a target is provided, only extracts occurences of | ||
* the provided target | ||
* | ||
* @param text The scripture text from which the characters will be extracted | ||
* @param target (Optional) If provided, the function only extracts exact matches of this words | ||
* @returns An array of repeated words extracted from the provided scripture text | ||
*/ | ||
export const extractRepeatedWords = ( | ||
text: string, | ||
target: string | undefined = undefined, | ||
): string[] => { | ||
const repeatedWords: string[] = []; | ||
const words = split(text, /[\s]+/); | ||
words.forEach((word, index, allWords) => { | ||
if (target && word !== target) return; | ||
if (index + 1 < allWords.length && word === allWords[index + 1]) repeatedWords.push(word); | ||
}); | ||
// Finds repeated words, and captures the first occurrence of the word | ||
const repeatedWords = text.match(/\b(\p{L}+)\b(?= \b\1\b)/gu) || []; | ||
|
||
if (target) return repeatedWords?.filter((word) => word === target); | ||
|
||
return repeatedWords; | ||
}; |
54 changes: 54 additions & 0 deletions
54
extensions/src/platform-scripture/src/inventory.web-view-provider.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
import papi from '@papi/backend'; | ||
import { | ||
GetWebViewOptions, | ||
IWebViewProvider, | ||
SavedWebViewDefinition, | ||
WebViewDefinition, | ||
} from '@papi/core'; | ||
import { LocalizeKey } from 'platform-bible-utils'; | ||
import inventoryWebView from './inventory.web-view?inline'; | ||
import inventoryWebViewStyles from './inventory.web-view.scss?inline'; | ||
|
||
export interface InventoryWebViewOptions extends GetWebViewOptions { | ||
projectId: string | undefined; | ||
} | ||
|
||
export default class InventoryWebViewProvider implements IWebViewProvider { | ||
constructor( | ||
public titleKey: LocalizeKey, | ||
public webViewType: string, | ||
) {} | ||
|
||
async getWebView( | ||
savedWebView: SavedWebViewDefinition, | ||
getWebViewOptions: InventoryWebViewOptions, | ||
): Promise<WebViewDefinition | undefined> { | ||
if (savedWebView.webViewType !== this.webViewType) | ||
throw new Error( | ||
`${this.webViewType} provider received request to provide a ${savedWebView.webViewType} web view`, | ||
); | ||
|
||
// We know that the projectId (if present in the state) will be a string. | ||
const projectId = | ||
getWebViewOptions.projectId || | ||
// eslint-disable-next-line no-type-assertion/no-type-assertion | ||
(savedWebView.state?.projectId as string) || | ||
undefined; | ||
|
||
const title: string = await papi.localization.getLocalizedString({ | ||
localizeKey: this.titleKey, | ||
}); | ||
|
||
return { | ||
title, | ||
...savedWebView, | ||
content: inventoryWebView, | ||
styles: inventoryWebViewStyles, | ||
state: { | ||
...savedWebView.state, | ||
projectId, | ||
webViewType: this.webViewType, | ||
}, | ||
}; | ||
} | ||
} |
Oops, something went wrong.