feat: add sending user requests from UI (#1927)

* feat: add sending user requests from UI

* fix(web): view controller manager user client references
This commit is contained in:
Karol Sójko
2022-11-03 09:39:38 +01:00
committed by GitHub
parent 6b50372db2
commit 7ead0f655b
15 changed files with 278 additions and 7 deletions

View File

@@ -0,0 +1,5 @@
import { UserRequestType } from '@standardnotes/common'
export type UserRequestParams = {
requestType: UserRequestType
}

View File

@@ -3,4 +3,5 @@ export enum RootQueryParam {
Settings = 'settings',
DemoToken = 'demo-token',
AcceptSubscriptionInvite = 'accept-subscription-invite',
UserRequest = 'user-request',
}

View File

@@ -1,3 +1,5 @@
import { UserRequestType } from '@standardnotes/common'
import { RouteParser } from './RouteParser'
import { RouteType } from './RouteType'
@@ -56,4 +58,12 @@ describe('route parser', () => {
expect(parser.type).toEqual(RouteType.AcceptSubscriptionInvite)
expect(parser.subscriptionInviteParams.inviteUuid).toEqual('1-2-3')
})
it('routes to user request', () => {
const url = 'https://app.standardnotes.com/?user-request=exit-discount'
const parser = new RouteParser(url)
expect(parser.type).toEqual(RouteType.UserRequest)
expect(parser.userRequestParams.requestType).toEqual(UserRequestType.ExitDiscount)
})
})

View File

@@ -1,10 +1,11 @@
import { Uuid } from '@standardnotes/common'
import { UserRequestType, Uuid } from '@standardnotes/common'
import { PreferenceId } from './../Preferences/PreferenceId'
import { DemoParams } from './Params/DemoParams'
import { OnboardingParams } from './Params/OnboardingParams'
import { PurchaseParams } from './Params/PurchaseParams'
import { SettingsParams } from './Params/SettingsParams'
import { SubscriptionInviteParams } from './Params/SubscriptionInviteParams'
import { UserRequestParams } from './Params/UserRequestParams'
import { RootQueryParam } from './RootQueryParam'
import { RootRoutes } from './RootRoutes'
@@ -28,6 +29,14 @@ export class RouteParser implements RouteParserInterface {
return this.parsedType
}
get userRequestParams(): UserRequestParams {
this.checkForProperRouteType(RouteType.UserRequest)
return {
requestType: this.searchParams.get(RootQueryParam.UserRequest) as UserRequestType,
}
}
get subscriptionInviteParams(): SubscriptionInviteParams {
this.checkForProperRouteType(RouteType.AcceptSubscriptionInvite)
@@ -89,6 +98,7 @@ export class RouteParser implements RouteParserInterface {
[RootQueryParam.Settings, RouteType.Settings],
[RootQueryParam.DemoToken, RouteType.Demo],
[RootQueryParam.AcceptSubscriptionInvite, RouteType.AcceptSubscriptionInvite],
[RootQueryParam.UserRequest, RouteType.UserRequest],
])
for (const rootQueryParam of rootQueryParametersMap.keys()) {

View File

@@ -3,6 +3,7 @@ import { OnboardingParams } from './Params/OnboardingParams'
import { PurchaseParams } from './Params/PurchaseParams'
import { SettingsParams } from './Params/SettingsParams'
import { SubscriptionInviteParams } from './Params/SubscriptionInviteParams'
import { UserRequestParams } from './Params/UserRequestParams'
import { RouteType } from './RouteType'
export interface RouteParserInterface {
@@ -11,5 +12,6 @@ export interface RouteParserInterface {
get purchaseParams(): PurchaseParams
get onboardingParams(): OnboardingParams
get subscriptionInviteParams(): SubscriptionInviteParams
get userRequestParams(): UserRequestParams
get type(): RouteType
}

View File

@@ -3,6 +3,7 @@ export enum RouteType {
Settings = 'settings',
Purchase = 'purchase',
AcceptSubscriptionInvite = 'accept-subscription-invite',
UserRequest = 'user-request',
Demo = 'demo',
None = 'none',
}

View File

@@ -1,10 +1,14 @@
import { addToast, ToastType } from '@standardnotes/toast'
import { addToast, dismissToast, ToastType } from '@standardnotes/toast'
import { ToastServiceInterface } from './ToastServiceInterface'
export class ToastService implements ToastServiceInterface {
showToast(type: ToastType, message: string): void {
addToast({
hideToast(toastId: string): void {
dismissToast(toastId)
}
showToast(type: ToastType, message: string): string {
return addToast({
type: type,
message,
})

View File

@@ -1,5 +1,6 @@
import { ToastType } from '@standardnotes/toast'
export interface ToastServiceInterface {
showToast(type: ToastType, message: string): void
showToast(type: ToastType, message: string): string
hideToast(toastId: string): void
}

View File

@@ -8,6 +8,7 @@ export * from './Route/Params/OnboardingParams'
export * from './Route/Params/PurchaseParams'
export * from './Route/Params/SettingsParams'
export * from './Route/Params/SubscriptionInviteParams'
export * from './Route/Params/UserRequestParams'
export * from './Route/RootQueryParam'
export * from './Route/RouteParser'
export * from './Route/RouteParserInterface'