Skip to content

Commit

Permalink
feat: generate entity ids on backend side (DAP-4767) (#29)
Browse files Browse the repository at this point in the history
  • Loading branch information
alsakhaev authored Sep 30, 2024
1 parent 6172ce9 commit 11630c0
Show file tree
Hide file tree
Showing 35 changed files with 301 additions and 125 deletions.
4 changes: 2 additions & 2 deletions apps/extension/src/contentscript/helpers.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Mutation } from '@mweb/engine'
import { MutationDto } from '@mweb/engine'

/**
* Simple object check.
Expand Down Expand Up @@ -27,7 +27,7 @@ export const compareDeep = (a: unknown, b: unknown) => JSON.stringify(a) === JSO
* @param m1
* @param m2
*/
export const compareMutations = (m1: Mutation, m2: Mutation): boolean =>
export const compareMutations = (m1: MutationDto, m2: MutationDto): boolean =>
!(
m1.id !== m2.id ||
!compareDeep(m1.targets, m2.targets) ||
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { AppMetadata, Document, useAppDocuments } from '@mweb/engine'
import { ApplicationDto, DocumentDto, useAppDocuments } from '@mweb/engine'
import React from 'react'
import styled from 'styled-components'
import { Image } from './image'
Expand Down Expand Up @@ -182,7 +182,7 @@ const CheckedIcon = () => (

export interface ISimpleApplicationCardProps {
src: string
metadata: AppMetadata['metadata']
metadata: ApplicationDto['metadata']
disabled: boolean
isChecked: boolean
onChange: (isChecked: boolean) => void
Expand All @@ -193,19 +193,19 @@ export interface ISimpleApplicationCardProps {

export interface IApplicationCardWithDocsProps {
src: string
metadata: AppMetadata['metadata']
metadata: ApplicationDto['metadata']
disabled: boolean
docsIds: AppInMutation['documentId'][]
onDocCheckboxChange: (docId: string | null, isChecked: boolean) => void
onOpenDocumentsModal: (docs: Document[]) => void
onOpenDocumentsModal: (docs: DocumentDto[]) => void
}

interface IApplicationCard
extends ISimpleApplicationCardProps,
Omit<IApplicationCardWithDocsProps, 'docsIds'> {
hasDocuments: boolean
usingDocs: (Document | null)[]
allDocs: Document[]
usingDocs: (DocumentDto | null)[]
allDocs: DocumentDto[]
}

const ApplicationCard: React.FC<IApplicationCard> = ({
Expand Down Expand Up @@ -289,7 +289,7 @@ export const SimpleApplicationCard: React.FC<ISimpleApplicationCardProps> = (pro
export const ApplicationCardWithDocs: React.FC<IApplicationCardWithDocsProps> = (props) => {
const { src, docsIds } = props
const { documents, isLoading } = useAppDocuments(src)
const usingDocs: (Document | null)[] = documents?.filter((doc) => docsIds.includes(doc.id))
const usingDocs: (DocumentDto | null)[] = documents?.filter((doc) => docsIds.includes(doc.id))
if (docsIds.includes(null)) usingDocs.unshift(null)

return isLoading ? (
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { AppMetadata } from '@mweb/engine'
import { ApplicationDto } from '@mweb/engine'
import React from 'react'
import styled from 'styled-components'
import { Image } from './image'
Expand Down Expand Up @@ -140,7 +140,7 @@ export interface Props {
metadata: DocumentMetadata | null
onChange: () => void
disabled: boolean
appMetadata: AppMetadata['metadata']
appMetadata: ApplicationDto['metadata']
}

export const DocumentCard: React.FC<Props> = ({
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Document } from '@mweb/engine'
import { DocumentDto } from '@mweb/engine'
import React, { FC, useState } from 'react'
import styled from 'styled-components'
import { SimpleApplicationCard } from './application-card'
Expand Down Expand Up @@ -142,7 +142,7 @@ const CloseIcon = () => (
)

export interface Props {
docs: Document[] | null
docs: DocumentDto[] | null
chosenDocumentsIds: (string | null)[]
setDocumentsIds: (ids: (string | null)[]) => void
onClose: () => void
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import {
AppMetadata,
Document,
Mutation,
ApplicationDto,
DocumentDto,
MutationDto,
useCreateMutation,
useEditMutation,
useMutableWeb,
Expand Down Expand Up @@ -147,9 +147,15 @@ const CloseIcon = () => (
</svg>
)

const createEmptyMutation = (accountId: string): Mutation =>
Mutation.create({
id: `${accountId}/mutation/Untitled-${generateRandomHex(6)}`,
// ToDo: use MutationCreateDto
const createEmptyMutation = (accountId: string): MutationDto => {
const localId = `Untitled-${generateRandomHex(6)}`
return {
id: `${accountId}/mutation/${localId}`,
authorId: accountId,
blockNumber: 0,
timestamp: 0,
localId: localId,
apps: [],
metadata: {
name: '',
Expand All @@ -161,11 +167,12 @@ const createEmptyMutation = (accountId: string): Mutation =>
if: { id: { in: [window.location.hostname] } },
},
],
})
}
}

export interface Props {
apps: AppMetadata[]
baseMutation: Mutation | null
apps: ApplicationDto[]
baseMutation: MutationDto | null
onClose: () => void
}

Expand Down Expand Up @@ -219,7 +226,7 @@ export const MutationEditorModal: FC<Props> = ({ baseMutation, apps, onClose })
const { mutations } = useMutableWeb()
const [isModified, setIsModified] = useState(true)
const [appIdToOpenDocsModal, setAppIdToOpenDocsModal] = useState<string | null>(null)
const [docsForModal, setDocsForModal] = useState<Document[] | null>(null)
const [docsForModal, setDocsForModal] = useState<DocumentDto[] | null>(null)

// Close modal with escape key
useEscape(onClose)
Expand Down Expand Up @@ -392,7 +399,7 @@ export const MutationEditorModal: FC<Props> = ({ baseMutation, apps, onClose })
setMode(itemId as MutationModalMode)
}

const handleOpenDocumentsModal = (appId: string, docs: Document[]) => {
const handleOpenDocumentsModal = (appId: string, docs: DocumentDto[]) => {
setAppIdToOpenDocsModal(appId)
setDocsForModal(docs)
}
Expand Down Expand Up @@ -442,7 +449,7 @@ export const MutationEditorModal: FC<Props> = ({ baseMutation, apps, onClose })
docsIds={editingMutation.apps
.filter((_app) => _app.appId === app.id)
.map((_app) => _app.documentId)}
onOpenDocumentsModal={(docs: Document[]) => handleOpenDocumentsModal(app.id, docs)}
onOpenDocumentsModal={(docs: DocumentDto[]) => handleOpenDocumentsModal(app.id, docs)}
onDocCheckboxChange={(docId: string | null, isChecked: boolean) =>
handleDocCheckboxChange(docId, app.id, isChecked)
}
Expand Down
19 changes: 12 additions & 7 deletions libs/engine/src/app/components/context-manager.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ import { ShadowDomWrapper } from '../components/shadow-dom-wrapper'
import { ContextTree } from '@mweb/react'
import { useContextApps } from '../contexts/mutable-web-context/use-context-apps'
import { useAppControllers } from '../contexts/mutable-web-context/use-app-controllers'
import { AppId, AppMetadata } from '../services/application/application.entity'
import { AppId } from '../services/application/application.entity'
import { ApplicationDto } from '../services/application/dtos/application.dto'
import {
BosUserLink,
BosUserLinkWithInstance,
ControllerLink,
UserLinkId,
Expand All @@ -27,7 +27,7 @@ import { ModalProps } from '../contexts/modal-context/modal-context'
import { Portal } from '../contexts/engine-context/engine-context'
import { Target } from '../services/target/target.entity'
import { filterAndDiscriminate } from '../common/filter-and-discriminate'
import { Document, DocumentId, DocumentMetadata } from '../services/document/document.entity'
import { DocumentId, DocumentMetadata } from '../services/document/document.entity'
import { ApplicationService } from '../services/application/application.service'
import { DocumentDto } from '../services/document/dtos/document.dto'

Expand Down Expand Up @@ -240,7 +240,7 @@ const ContextHandler: FC<{ context: IContextNode; insPoints: InsertionPointWithE
memoize(
(appInstanceId: string) =>
async (
appDocId: DocumentId,
appDocId: DocumentId, // ToDo: remove
appDocMeta: DocumentMetadata,
ctx: TransferableContext,
dataByAccount: LinkedDataByAccountDto
Expand All @@ -251,11 +251,16 @@ const ContextHandler: FC<{ context: IContextNode; insPoints: InsertionPointWithE
)
if (!appInstance) throw new Error('The app is not active')

const document = Document.create({
// ToDo: replace with DocumentCreateDto
const document: DocumentDto = {
id: appDocId,
authorId: appDocId.split('/')[0],
localId: appDocId.split('/')[2],
blockNumber: 0,
timestamp: 0,
metadata: appDocMeta,
openWith: [appInstance.appId],
})
}

const { mutation } = await engine.documentService.createDocumentWithData(
selectedMutation.id,
Expand Down Expand Up @@ -358,7 +363,7 @@ const InsPointHandler: FC<{
transferableContext: TransferableContext
allUserLinks: BosUserLinkWithInstance[]
components: Portal[]
apps: AppMetadata[]
apps: ApplicationDto[]
isEditMode: boolean
onContextQuery: (target: Target) => TransferableContext | null
onCreateUserLink: (appId: AppId) => Promise<void>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,20 @@
import { Engine } from '../../../engine'
import { createContext } from 'react'
import { AppMetadata, AppInstanceWithSettings } from '../../services/application/application.entity'
import { Mutation, MutationWithSettings } from '../../services/mutation/mutation.entity'
import { AppInstanceWithSettings } from '../../services/application/application.entity'
import { ApplicationDto } from '../../services/application/dtos/application.dto'
import { MutationWithSettings } from '../../services/mutation/mutation.entity'
import { MutationDto } from '../../services/mutation/dtos/mutation.dto'
import { NearConfig } from '../../../constants'

export type MutableWebContextState = {
config: NearConfig
engine: Engine
mutations: MutationWithSettings[]
allApps: AppMetadata[]
allApps: ApplicationDto[]
mutationApps: AppInstanceWithSettings[]
activeApps: AppInstanceWithSettings[]
selectedMutation: MutationWithSettings | null
refreshMutation: (mutation: Mutation) => Promise<void>
refreshMutation: (mutation: MutationDto) => Promise<void>
isLoading: boolean
switchMutation: (mutationId: string | null) => void
favoriteMutationId: string | null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import { TargetService } from '../../services/target/target.service'
import { mutationDisabled, mutationSwitched } from './notifications'
import { getNearConfig } from '../../../constants'
import { ModalContextState } from '../modal-context/modal-context'
import { Mutation } from '../../services/mutation/mutation.entity'
import { MutationDto } from '../../services/mutation/dtos/mutation.dto'
import { ParserType, ParserConfig } from '@mweb/core'

type Props = {
Expand Down Expand Up @@ -159,7 +159,7 @@ const MutableWebProvider: FC<Props> = ({ config, defaultMutationId, modalApi, ch
// Update last usage for selected mutation
setMutations((prev) =>
prev.map((mut) =>
mut.id === mutationId ? mut.copy({ settings: { ...mut.settings, lastUsage } }) : mut
mut.id === mutationId ? { ...mut, settings: { ...mut.settings, lastUsage } } : mut
)
)
}
Expand All @@ -169,7 +169,7 @@ const MutableWebProvider: FC<Props> = ({ config, defaultMutationId, modalApi, ch
[selectedMutationId]
)

const refreshMutation = useCallback(async (mutation: Mutation) => {
const refreshMutation = useCallback(async (mutation: MutationDto) => {
const mutationWithSettings = await engine.mutationService.populateMutationWithSettings(mutation)

setMutations((prev) => prev.map((mut) => (mut.id === mutation.id ? mutationWithSettings : mut)))
Expand All @@ -196,9 +196,7 @@ const MutableWebProvider: FC<Props> = ({ config, defaultMutationId, modalApi, ch

setMutations((prev) =>
prev.map((mut) =>
mut.id === mutationId
? mut.copy({ settings: { ...mut.settings, lastUsage: null } })
: mut
mut.id === mutationId ? { ...mut, settings: { ...mut.settings, lastUsage: null } } : mut
)
)
} catch (err) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { AppId } from '../../services/application/application.entity'
import { Document } from '../../services/document/document.entity'
import { DocumentDto } from '../../services/document/dtos/document.dto'
import { useMutableWeb } from './use-mutable-web'
import { useQueryArray } from '../../hooks/use-query-array'

export const useAppDocuments = (appId: AppId) => {
const { engine } = useMutableWeb()

const { data, isLoading, error } = useQueryArray<Document>({
const { data, isLoading, error } = useQueryArray<DocumentDto>({
query: () => engine.documentService.getDocumentsByAppId(appId),
deps: [engine, appId],
})
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { AppMetadata } from '../../services/application/application.entity'
import { ApplicationDto } from '../../services/application/dtos/application.dto'
import { Engine } from '../../../engine'
import { useQueryArray } from '../../hooks/use-query-array'

export const useApplications = (engine: Engine) => {
const { data, isLoading, error } = useQueryArray<AppMetadata>({
const { data, isLoading, error } = useQueryArray<ApplicationDto>({
query: () => engine.applicationService.getApplications(),
deps: [engine],
})
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
import { useContext, useState } from 'react'
import { MutableWebContext } from './mutable-web-context'
import { Mutation } from '../../services/mutation/mutation.entity'
import { SaveMutationOptions } from '../../services/mutation/mutation.service'
import { MutationCreateDto } from '../../services/mutation/dtos/mutation-create.dto'

export function useCreateMutation() {
const { engine, setMutations } = useContext(MutableWebContext)

const [isLoading, setIsLoading] = useState(false)
const [error, setError] = useState<string | null>(null)

const createMutation = async (creatingMutation: Mutation, options?: SaveMutationOptions) => {
const createMutation = async (
creatingMutation: MutationCreateDto,
options?: SaveMutationOptions
) => {
try {
setIsLoading(true)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Mutation } from '../../services/mutation/mutation.entity'
import { MutationDto } from '../../services/mutation/dtos/mutation.dto'
import { useContext, useState } from 'react'
import { MutableWebContext } from './mutable-web-context'
import { SaveMutationOptions } from '../../services/mutation/mutation.service'
Expand All @@ -9,7 +9,7 @@ export function useEditMutation() {
const [isLoading, setIsLoading] = useState(false)
const [error, setError] = useState<string | null>(null)

const editMutation = async (editingMutation: Mutation, options?: SaveMutationOptions) => {
const editMutation = async (editingMutation: MutationDto, options?: SaveMutationOptions) => {
try {
setIsLoading(true)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ export function useMutationApp(appInstanceId: string) {
setMutationApps((apps) =>
apps.map((app) =>
app.instanceId === appInstanceId
? app.copy({ settings: { ...app.settings, isEnabled: true } })
? { ...app, settings: { ...app.settings, isEnabled: true } }
: app
)
)
Expand Down Expand Up @@ -55,7 +55,7 @@ export function useMutationApp(appInstanceId: string) {
setMutationApps((apps) =>
apps.map((app) =>
app.instanceId === appInstanceId
? app.copy({ settings: { ...app.settings, isEnabled: false } })
? { ...app, settings: { ...app.settings, isEnabled: false } }
: app
)
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { AppInstanceWithSettings } from '../../services/application/application.entity'
import { Mutation } from '../../services/mutation/mutation.entity'
import { MutationDto } from '../../services/mutation/dtos/mutation.dto'
import { Engine } from '../../../engine'
import { useQueryArray } from '../../hooks/use-query-array'

export const useMutationApps = (engine: Engine, mutation?: Mutation | null) => {
export const useMutationApps = (engine: Engine, mutation?: MutationDto | null) => {
const { data, setData, isLoading, error } = useQueryArray<AppInstanceWithSettings>({
query: async () => (mutation ? engine.applicationService.getAppsFromMutation(mutation) : []),
deps: [engine, mutation],
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { AppMetadata } from '../../services/application/application.entity'
import { ApplicationDto } from '../../services/application/dtos/application.dto'
import { ParserConfig } from '../../services/parser-config/parser-config.entity'
import { Engine } from '../../../engine'
import { useQueryArray } from '../../hooks/use-query-array'

export const useMutationParsers = (engine: Engine, apps: AppMetadata[]) => {
export const useMutationParsers = (engine: Engine, apps: ApplicationDto[]) => {
const { data, isLoading, error } = useQueryArray<ParserConfig>({
query: () => engine.parserConfigService.getParserConfigsForApps(apps),
deps: [engine, apps],
Expand Down
Loading

0 comments on commit 11630c0

Please sign in to comment.