From 65f4ccf005ec66ee1594a1894ec20665a55c6293 Mon Sep 17 00:00:00 2001 From: emielvdveen Date: Mon, 11 Dec 2023 14:22:37 +0100 Subject: [PATCH] Fixed endless growing page, made Footer optional and created simple default flow --- public/port-0.0.0-py3-none-any.whl | Bin 6593 -> 6329 bytes .../py/dist/port-0.0.0-py3-none-any.whl | Bin 6593 -> 6329 bytes src/framework/processing/py/port/api/props.py | 9 +- src/framework/processing/py/port/script.py | 112 ++++++------- src/framework/processing/worker_engine.ts | 23 +-- src/framework/types/pages.ts | 13 +- src/framework/visualisation/react/factory.tsx | 7 +- .../react/ui/pages/donation_page.tsx | 32 ++-- .../react/ui/pages/splash_screen.tsx | 153 ------------------ .../react/ui/pages/templates/footer.tsx | 12 +- .../react/ui/pages/templates/page.tsx | 7 +- 11 files changed, 78 insertions(+), 290 deletions(-) delete mode 100644 src/framework/visualisation/react/ui/pages/splash_screen.tsx diff --git a/public/port-0.0.0-py3-none-any.whl b/public/port-0.0.0-py3-none-any.whl index dc81166b500a818137b7c34bd9e282e882bf0a59..3deb6ca47ce067b3fe1ec1ee669211f8d0d7bb8d 100644 GIT binary patch delta 4671 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 diff --git a/src/framework/processing/py/dist/port-0.0.0-py3-none-any.whl b/src/framework/processing/py/dist/port-0.0.0-py3-none-any.whl index dc81166b500a818137b7c34bd9e282e882bf0a59..3deb6ca47ce067b3fe1ec1ee669211f8d0d7bb8d 100644 GIT binary patch delta 4671 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 diff --git a/src/framework/processing/py/port/api/props.py b/src/framework/processing/py/port/api/props.py index adcfde21..e3b6a0c2 100644 --- a/src/framework/processing/py/port/api/props.py +++ b/src/framework/processing/py/port/api/props.py @@ -401,7 +401,12 @@ class PropsUIPageDonation: platform: str header: PropsUIHeader body: PropsUIPromptRadioInput | PropsUIPromptConsentForm | PropsUIPromptFileInput | PropsUIPromptConfirm | PropsUIPromptQuestionnaire - footer: PropsUIFooter + footer: Optional[PropsUIFooter] + + def translate_footer(self): + if self.footer is None: + return None + return self.footer.toDict() def toDict(self): dict = {} @@ -409,7 +414,7 @@ def toDict(self): dict["platform"] = self.platform dict["header"] = self.header.toDict() dict["body"] = self.body.toDict() - dict["footer"] = self.footer.toDict() + dict["footer"] = self.translate_footer() return dict diff --git a/src/framework/processing/py/port/script.py b/src/framework/processing/py/port/script.py index 35386d7d..14a4a631 100644 --- a/src/framework/processing/py/port/script.py +++ b/src/framework/processing/py/port/script.py @@ -8,80 +8,59 @@ def process(sessionId): yield donate(f"{sessionId}-tracking", '[{ "message": "user entered script" }]') - platforms = ["Twitter", "Facebook", "Instagram", "Youtube"] - - subflows = len(platforms) - steps = 2 - step_percentage = (100/subflows)/steps - - # progress in % - progress = 0 - - for index, platform in enumerate(platforms): - meta_data = [] - meta_data.append(("debug", f"{platform}: start")) - - # STEP 1: select the file - progress += step_percentage - data = None - while True: - meta_data.append(("debug", f"{platform}: prompt file")) - promptFile = prompt_file(platform, "application/zip, text/plain") - fileResult = yield render_donation_page(platform, promptFile, progress) - if fileResult.__type__ == 'PayloadString': - meta_data.append(("debug", f"{platform}: extracting file")) - extractionResult = doSomethingWithTheFile(platform, fileResult.value) - if extractionResult != 'invalid': - meta_data.append(("debug", f"{platform}: extraction successful, go to consent form")) - data = extractionResult - break - else: - meta_data.append(("debug", f"{platform}: prompt confirmation to retry file selection")) - retry_result = yield render_donation_page(platform, retry_confirmation(platform), progress) - if retry_result.__type__ == 'PayloadTrue': - meta_data.append(("debug", f"{platform}: skip due to invalid file")) - continue - else: - meta_data.append(("debug", f"{platform}: retry prompt file")) - break - else: - meta_data.append(("debug", f"{platform}: skip to next step")) + key = "zip-contents-example" + meta_data = [] + meta_data.append(("debug", f"{key}: start")) + + # STEP 1: select the file + data = None + while True: + meta_data.append(("debug", f"{key}: prompt file")) + promptFile = prompt_file("application/zip, text/plain") + fileResult = yield render_donation_page(promptFile) + if fileResult.__type__ == 'PayloadString': + meta_data.append(("debug", f"{key}: extracting file")) + extractionResult = doSomethingWithTheFile(fileResult.value) + if extractionResult != 'invalid': + meta_data.append(("debug", f"{key}: extraction successful, go to consent form")) + data = extractionResult break + else: + meta_data.append(("debug", f"{key}: prompt confirmation to retry file selection")) + retry_result = yield render_donation_page(retry_confirmation()) + if retry_result.__type__ == 'PayloadTrue': + meta_data.append(("debug", f"{key}: skip due to invalid file")) + continue + else: + meta_data.append(("debug", f"{key}: retry prompt file")) + break - # STEP 2: ask for consent - progress += step_percentage - if data is not None: - meta_data.append(("debug", f"{platform}: prompt consent")) - prompt = prompt_consent(platform, data, meta_data) - consent_result = yield render_donation_page(platform, prompt, progress) - if consent_result.__type__ == "PayloadJSON": - meta_data.append(("debug", f"{platform}: donate consent data")) - yield donate(f"{sessionId}-{platform}", consent_result.value) + # STEP 2: ask for consent + if data is not None: + meta_data.append(("debug", f"{key}: prompt consent")) + prompt = prompt_consent(data, meta_data) + consent_result = yield render_donation_page(prompt) + if consent_result.__type__ == "PayloadJSON": + meta_data.append(("debug", f"{key}: donate consent data")) + yield donate(f"{sessionId}-{key}", consent_result.value) yield exit(0, "Success") - yield render_end_page() - -def render_end_page(): - page = props.PropsUIPageEnd() - return CommandUIRender(page) - -def render_donation_page(platform, body, progress): +def render_donation_page(body): header = props.PropsUIHeader(props.Translatable({ - "en": platform, - "nl": platform + "en": "Port flow example", + "nl": "Port voorbeeld flow" })) - footer = props.PropsUIFooter(progress) - page = props.PropsUIPageDonation(platform, header, body, footer) + page = props.PropsUIPageDonation("Zip", header, body, None) return CommandUIRender(page) -def retry_confirmation(platform): +def retry_confirmation(): text = props.Translatable({ - "en": f"Unfortunately, we cannot process your {platform} file. Continue, if you are sure that you selected the right file. Try again to select a different file.", - "nl": f"Helaas, kunnen we uw {platform} bestand niet verwerken. Weet u zeker dat u het juiste bestand heeft gekozen? Ga dan verder. Probeer opnieuw als u een ander bestand wilt kiezen." + "en": "Unfortunately, we cannot process your file. Continue, if you are sure that you selected the right file. Try again to select a different file.", + "nl": "Helaas, kunnen we uw bestand niet verwerken. Weet u zeker dat u het juiste bestand heeft gekozen? Ga dan verder. Probeer opnieuw als u een ander bestand wilt kiezen." }) ok = props.Translatable({ "en": "Try again", @@ -94,16 +73,16 @@ def retry_confirmation(platform): return props.PropsUIPromptConfirm(text, ok, cancel) -def prompt_file(platform, extensions): +def prompt_file(extensions): description = props.Translatable({ - "en": f"Please follow the download instructions and choose the file that you stored on your device. Click “Skip” at the right bottom, if you do not have a {platform} file. ", - "nl": f"Volg de download instructies en kies het bestand dat u opgeslagen heeft op uw apparaat. Als u geen {platform} bestand heeft klik dan op “Overslaan” rechts onder." + "en": "Please select any zip file stored on your device.", + "nl": "Selecteer een willekeurige zip file die u heeft opgeslagen op uw apparaat." }) return props.PropsUIPromptFileInput(description, extensions) -def doSomethingWithTheFile(platform, filename): +def doSomethingWithTheFile(filename): return extract_zip_contents(filename) @@ -121,7 +100,7 @@ def extract_zip_contents(filename): return "invalid" -def prompt_consent(id, data, meta_data): +def prompt_consent(data, meta_data): table_title = props.Translatable({ "en": "Zip file contents", @@ -143,5 +122,6 @@ def prompt_consent(id, data, meta_data): def donate(key, json_string): return CommandSystemDonate(key, json_string) + def exit(code, info): return CommandSystemExit(code, info) diff --git a/src/framework/processing/worker_engine.ts b/src/framework/processing/worker_engine.ts index 4dd3d25d..70611f51 100755 --- a/src/framework/processing/worker_engine.ts +++ b/src/framework/processing/worker_engine.ts @@ -1,5 +1,5 @@ import { CommandHandler, ProcessingEngine } from '../types/modules' -import { CommandSystemDonate, CommandUIRender, isCommand, Response } from '../types/commands' +import { CommandSystemDonate, isCommand, Response } from '../types/commands' export default class WorkerProcessingEngine implements ProcessingEngine { sessionId: String @@ -7,7 +7,6 @@ export default class WorkerProcessingEngine implements ProcessingEngine { commandHandler: CommandHandler resolveInitialized!: () => void - resolveContinue!: () => void constructor (sessionId: string, worker: Worker, commandHandler: CommandHandler) { this.sessionId = sessionId @@ -60,9 +59,8 @@ export default class WorkerProcessingEngine implements ProcessingEngine { console.log('[WorkerProcessingEngine] started') const waitForInitialization: Promise = this.waitForInitialization() - const waitForSplashScreen: Promise = this.waitForSplashScreen() - Promise.all([waitForInitialization, waitForSplashScreen]).then( + waitForInitialization.then( () => { this.firstRunCycle() }, () => {} ) @@ -75,23 +73,6 @@ export default class WorkerProcessingEngine implements ProcessingEngine { }) } - async waitForSplashScreen (): Promise { - return await new Promise((resolve) => { - this.resolveContinue = resolve - this.renderSplashScreen() - }) - } - - renderSplashScreen (): void { - const command: CommandUIRender = { __type__: 'CommandUIRender', page: { __type__: 'PropsUIPageSplashScreen' } } - if (isCommand(command)) { - this.commandHandler.onCommand(command).then( - (_response) => this.resolveContinue(), - () => {} - ) - } - } - firstRunCycle (): void { this.worker.postMessage({ eventType: 'firstRunCycle', sessionId: this.sessionId }) } diff --git a/src/framework/types/pages.ts b/src/framework/types/pages.ts index 2934e7f4..b3ec8eab 100644 --- a/src/framework/types/pages.ts +++ b/src/framework/types/pages.ts @@ -9,36 +9,27 @@ import { } from './prompts' export type PropsUIPage = - PropsUIPageSplashScreen | PropsUIPageDonation | PropsUIPageEnd | PropsUIPageError export function isPropsUIPage (arg: any): arg is PropsUIPage { return ( - isPropsUIPageSplashScreen(arg) || isPropsUIPageDonation(arg) || isPropsUIPageEnd(arg) || isPropsUIPageError(arg) ) } -export interface PropsUIPageSplashScreen { - __type__: 'PropsUIPageSplashScreen' -} -export function isPropsUIPageSplashScreen (arg: any): arg is PropsUIPageSplashScreen { - return isInstanceOf(arg, 'PropsUIPageSplashScreen', []) -} - export interface PropsUIPageDonation { __type__: 'PropsUIPageDonation' platform: string header: PropsUIHeader body: PropsUIPromptFileInput | PropsUIPromptConfirm | PropsUIPromptConsentForm | PropsUIPromptRadioInput | PropsUIPromptQuestionnaire - footer: PropsUIFooter + footer?: PropsUIFooter } export function isPropsUIPageDonation (arg: any): arg is PropsUIPageDonation { - return isInstanceOf(arg, 'PropsUIPageDonation', ['platform', 'header', 'body', 'footer']) + return isInstanceOf(arg, 'PropsUIPageDonation', ['platform', 'header', 'body']) } export interface PropsUIPageEnd { diff --git a/src/framework/visualisation/react/factory.tsx b/src/framework/visualisation/react/factory.tsx index 3a09784d..78b3d283 100644 --- a/src/framework/visualisation/react/factory.tsx +++ b/src/framework/visualisation/react/factory.tsx @@ -1,9 +1,9 @@ import { EndPage } from './ui/pages/end_page' -import { isPropsUIPageEnd, isPropsUIPageDonation, PropsUIPage, isPropsUIPageSplashScreen, isPropsUIPageError } from '../../types/pages' +import { isPropsUIPageEnd, isPropsUIPageDonation, PropsUIPage, isPropsUIPageError } from '../../types/pages' import { DonationPage } from './ui/pages/donation_page' import { Payload } from '../../types/commands' -import { SplashScreen } from './ui/pages/splash_screen' + import { ErrorPage } from './ui/pages/error_page' export interface ReactFactoryContext { @@ -13,9 +13,6 @@ export interface ReactFactoryContext { export default class ReactFactory { createPage (page: PropsUIPage, context: ReactFactoryContext): JSX.Element { - if (isPropsUIPageSplashScreen(page)) { - return - } if (isPropsUIPageEnd(page)) { return } diff --git a/src/framework/visualisation/react/ui/pages/donation_page.tsx b/src/framework/visualisation/react/ui/pages/donation_page.tsx index d555ad90..cc98ee1e 100644 --- a/src/framework/visualisation/react/ui/pages/donation_page.tsx +++ b/src/framework/visualisation/react/ui/pages/donation_page.tsx @@ -52,30 +52,26 @@ export const DonationPage = (props: Props): JSX.Element => { resolve?.({ __type__: 'PayloadFalse', value: false }) } - const footer: JSX.Element = ( -