Skip to content

Commit d51456a

Browse files
author
ci-bot
committed
Add plumbing for template explorer to modal plugin
1 parent 7b40a27 commit d51456a

File tree

5 files changed

+83
-5
lines changed

5 files changed

+83
-5
lines changed

apps/remix-ide/src/app/plugins/notification.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,26 @@
1+
/* eslint-disable @nrwl/nx/enforce-module-boundaries */
12
import { Plugin } from '@remixproject/engine'
23
import { LibraryProfile, MethodApi, StatusEvents } from '@remixproject/plugin-utils'
34
import { AppModal } from '@remix-ui/app'
45
import { AlertModal } from '@remix-ui/app'
56
import { dispatchModalInterface } from '@remix-ui/app'
7+
import { TemplateExplorerModal } from 'libs/remix-ui/app/src/lib/remix-app/interface'
68

79
interface INotificationApi {
810
events: StatusEvents
911
methods: {
1012
modal: (args: AppModal) => void
1113
alert: (args: AlertModal) => void
1214
toast: (message: string) => void
15+
templateExplorer: (args: TemplateExplorerModal) => void
1316
}
1417
}
1518

1619
const profile: LibraryProfile<INotificationApi> = {
1720
name: 'notification',
1821
displayName: 'Notification',
1922
description: 'Displays notifications',
20-
methods: ['modal', 'alert', 'toast']
23+
methods: ['modal', 'alert', 'toast', 'templateExplorer']
2124
}
2225

2326
export class NotificationPlugin extends Plugin implements MethodApi<INotificationApi> {
@@ -34,6 +37,10 @@ export class NotificationPlugin extends Plugin implements MethodApi<INotificatio
3437
return this.dispatcher.modal(args)
3538
}
3639

40+
async templateExplorer(args: TemplateExplorerModal) {
41+
return this.dispatcher.templateExplorer(args)
42+
}
43+
3744
async alert(args: AlertModal) {
3845
return this.dispatcher.alert(args)
3946
}

libs/remix-ui/app/src/lib/remix-app/actions/modals.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { AppModal } from '../interface'
1+
import { AppModal, TemplateExplorerModal } from '../interface'
22

33
type ActionMap<M extends { [index: string]: any }> = {
44
[Key in keyof M]: M[Key] extends undefined
@@ -13,6 +13,7 @@ type ActionMap<M extends { [index: string]: any }> = {
1313

1414
export const enum modalActionTypes {
1515
setModal = 'SET_MODAL',
16+
setTemplateExplorer = 'SET_TEMPLATE_EXPLORER',
1617
setToast = 'SET_TOAST',
1718
processQueue = 'PROCESS_QUEUEU',
1819
handleHideModal = 'HANDLE_HIDE_MODAL',
@@ -21,6 +22,7 @@ export const enum modalActionTypes {
2122

2223
type ModalPayload = {
2324
[modalActionTypes.setModal]: AppModal
25+
[modalActionTypes.setTemplateExplorer]: TemplateExplorerModal
2426
[modalActionTypes.handleHideModal]: any
2527
[modalActionTypes.setToast]: { message: string | JSX.Element, timestamp: number }
2628
[modalActionTypes.handleToaster]: any,

libs/remix-ui/app/src/lib/remix-app/context/context.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React from 'react'
2-
import { AlertModal, AppModal, AppState } from '../interface'
2+
import { AlertModal, AppModal, AppState, TemplateExplorerModal } from '../interface'
33
import { ModalInitialState } from '../state/modals'
44
import { AppAction } from '../actions/app'
55

@@ -26,6 +26,7 @@ export interface dispatchModalInterface {
2626
modal: (data: AppModal) => void
2727
toast: (message: string | JSX.Element) => void
2828
alert: (data: AlertModal) => void
29+
templateExplorer: (data: TemplateExplorerModal) => void
2930
handleHideModal: () => void
3031
handleToaster: () => void
3132
}
@@ -34,6 +35,7 @@ export const dispatchModalContext = React.createContext<dispatchModalInterface>(
3435
modal: (data: AppModal) => {},
3536
toast: (message: string | JSX.Element) => {},
3637
alert: (data: AlertModal) => {},
38+
templateExplorer: (data: TemplateExplorerModal) => {},
3739
handleHideModal: () => {},
3840
handleToaster: () => {}
3941
})

libs/remix-ui/app/src/lib/remix-app/context/provider.tsx

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React, { useReducer } from 'react'
22
import { useIntl, IntlShape } from 'react-intl'
33
import { modalActionTypes } from '../actions/modals'
4-
import { AlertModal, AppModal } from '../interface'
4+
import { AlertModal, AppModal, TemplateExplorerModal } from '../interface'
55
import { modalReducer } from '../reducer/modals'
66
import { ModalInitialState } from '../state/modals'
77
import { ModalTypes } from '../types'
@@ -51,6 +51,38 @@ export const ModalProvider = ({ children = [], reducer = modalReducer, initialSt
5151
})
5252
}
5353

54+
const templateExplorer = (modalData: TemplateExplorerModal) => {
55+
dispatch({
56+
type: modalActionTypes.setTemplateExplorer,
57+
payload: {
58+
id: modalData.id,
59+
title: modalData.title,
60+
message: modalData.message,
61+
okLabel: modalData.okLabel,
62+
okFn: modalData.okFn,
63+
cancelLabel: modalData.cancelLabel,
64+
cancelFn: modalData.cancelFn,
65+
timestamp: modalData.timestamp,
66+
hide: modalData.hide,
67+
validationFn: modalData.validationFn,
68+
resolve: modalData.resolve,
69+
next: modalData.next,
70+
data: modalData.data,
71+
showCancelIcon: modalData.showCancelIcon,
72+
preventBlur: modalData.preventBlur,
73+
placeholderText: modalData.placeholderText,
74+
workspaceTemplateGroup: modalData.workspaceTemplateGroup,
75+
workspaceTemplate: modalData.workspaceTemplate,
76+
workspaceTemplateOptions: modalData.workspaceTemplateOptions,
77+
workspaceName: modalData.workspaceName,
78+
modifyWorkspaceName: modalData.modifyWorkspaceName,
79+
workspaceDescription: modalData.workspaceDescription,
80+
workspaceTags: modalData.workspaceTags,
81+
modifyWorkspace: modalData.modifyWorkspace
82+
}
83+
})
84+
}
85+
5486
const alert = (modalData: AlertModal) => {
5587
return modal({
5688
id: modalData.id,
@@ -85,7 +117,7 @@ export const ModalProvider = ({ children = [], reducer = modalReducer, initialSt
85117
}
86118

87119
return (
88-
<dispatchModalContext.Provider value={{ modal, toast, alert, handleHideModal, handleToaster }}>
120+
<dispatchModalContext.Provider value={{ modal, toast, alert, handleHideModal, handleToaster, templateExplorer }}>
89121
<modalContext.Provider value={{ modals, toasters, focusModal, focusToaster }}>{children}</modalContext.Provider>
90122
</dispatchModalContext.Provider>
91123
)

libs/remix-ui/app/src/lib/remix-app/interface/index.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
/* eslint-disable @nrwl/nx/enforce-module-boundaries */
12
import { branch, desktopConnection, GitHubUser } from '@remix-api'
23
import { AppModalCancelTypes, ModalTypes } from '../types'
4+
import { Template, TemplateGroup, TemplateOption } from 'libs/remix-ui/workspace/src/lib/utils/constants'
35

46
export type ValidationResult = {
57
valid: boolean,
@@ -49,6 +51,39 @@ export interface forceChoiceModal {
4951
message: string | JSX.Element,
5052
}
5153

54+
export interface TemplateExplorerModal {
55+
id: string
56+
title?: string,
57+
message: JSX.Element,
58+
workspaceName: string,
59+
modifyWorkspaceName: boolean,
60+
workspaceDescription: string,
61+
workspaceTemplateOptions: TemplateOption,
62+
workspaceTemplateGroup: TemplateGroup,
63+
workspaceTemplate: Template,
64+
timestamp?: number
65+
hide?: boolean
66+
validationFn?: (value: string) => ValidationResult
67+
// eslint-disable-next-line no-undef
68+
okLabel: string | JSX.Element
69+
okFn?: (value?:any) => void
70+
cancelLabel?: string | JSX.Element
71+
cancelFn?: (reason?: AppModalCancelTypes) => void,
72+
modalType?: ModalTypes,
73+
modalParentClass?: string
74+
defaultValue?: string
75+
hideFn?: () => void,
76+
resolve?: (value?:any) => void,
77+
next?: () => void,
78+
data?: any,
79+
showCancelIcon?: boolean,
80+
preventBlur?: boolean
81+
placeholderText?: string
82+
searchTerm?: string
83+
workspaceTags?: string[]
84+
modifyWorkspace?: boolean
85+
}
86+
5287
export interface AppState {
5388
gitHubUser: GitHubUser
5489
currentBranch: branch

0 commit comments

Comments
 (0)