From 5cdcac75b1cd83ef65b3e689f3fb782a3c3bc4c8 Mon Sep 17 00:00:00 2001 From: Brian Arthur Cooper Date: Thu, 1 Feb 2024 15:36:03 -0500 Subject: [PATCH] refactor(protocol-library-kludge): remove deprecated protocol library ui (#14298) --- .codecov.yml | 1 - .github/CODEOWNERS | 3 +- package.json | 1 - protocol-library-kludge/.gitignore | 2 - protocol-library-kludge/Makefile | 41 ------ protocol-library-kludge/README.md | 15 -- protocol-library-kludge/package.json | 30 ---- protocol-library-kludge/src/App.tsx | 7 - protocol-library-kludge/src/URLDeck.css | 7 - protocol-library-kludge/src/URLDeck.tsx | 134 ------------------ protocol-library-kludge/src/getLabware.ts | 75 ---------- protocol-library-kludge/src/globals.css | 3 - protocol-library-kludge/src/index.hbs | 15 -- protocol-library-kludge/src/index.tsx | 10 -- protocol-library-kludge/tsconfig.json | 17 --- .../typings/css-modules.d.ts | 5 - protocol-library-kludge/webpack.config.js | 27 ---- tsconfig-eslint.json | 2 - tsconfig.json | 3 - 19 files changed, 2 insertions(+), 396 deletions(-) delete mode 100644 protocol-library-kludge/.gitignore delete mode 100644 protocol-library-kludge/Makefile delete mode 100644 protocol-library-kludge/README.md delete mode 100644 protocol-library-kludge/package.json delete mode 100644 protocol-library-kludge/src/App.tsx delete mode 100644 protocol-library-kludge/src/URLDeck.css delete mode 100644 protocol-library-kludge/src/URLDeck.tsx delete mode 100644 protocol-library-kludge/src/getLabware.ts delete mode 100644 protocol-library-kludge/src/globals.css delete mode 100644 protocol-library-kludge/src/index.hbs delete mode 100644 protocol-library-kludge/src/index.tsx delete mode 100644 protocol-library-kludge/tsconfig.json delete mode 100644 protocol-library-kludge/typings/css-modules.d.ts delete mode 100644 protocol-library-kludge/webpack.config.js diff --git a/.codecov.yml b/.codecov.yml index 1ac3cc70a0d..4eb13688110 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -1,6 +1,5 @@ ignore: - '**/node_modules' - - 'protocol-library-kludge' - 'webpack-config' - 'hardware-testing' - '**/*.md' diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index f0ee1890dd2..28f0fb7d1f8 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -12,7 +12,6 @@ /protocol-designer @Opentrons/app-and-uis /labware-designer @Opentrons/app-and-uis /labware-library @Opentrons/app-and-uis -/protocol-library-kludge @Opentrons/app-and-uis /update-server @Opentrons/robot-svcs /discovery-client @Opentrons/robot-svcs @Opentrons/app-and-uis /shared-data/pipette @Opentrons/embedded-sw @@ -24,6 +23,8 @@ # subprojects by language - some subprojects are shared by teams but united by a # language community (including makefiles and config) so mark them appropriately /app @Opentrons/js +/api-client @Opentrons/js +/react-api-client @Opentrons/js /app-shell @Opentrons/js /components @Opentrons/js /api @Opentrons/py diff --git a/package.json b/package.json index ec8e480cb65..e5086e5db1e 100755 --- a/package.json +++ b/package.json @@ -11,7 +11,6 @@ "labware-designer", "labware-library", "protocol-designer", - "protocol-library-kludge", "shared-data", "step-generation", "webpack-config", diff --git a/protocol-library-kludge/.gitignore b/protocol-library-kludge/.gitignore deleted file mode 100644 index 34100bf1852..00000000000 --- a/protocol-library-kludge/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# type caches -lib/ \ No newline at end of file diff --git a/protocol-library-kludge/Makefile b/protocol-library-kludge/Makefile deleted file mode 100644 index 3cf944cc962..00000000000 --- a/protocol-library-kludge/Makefile +++ /dev/null @@ -1,41 +0,0 @@ -# opentrons protocol-library-kludge makefile - -# using bash instead of /bin/bash in SHELL prevents macOS optimizing away our PATH update -SHELL := bash - -# add node_modules/.bin to PATH -PATH := $(shell cd .. && yarn bin):$(PATH) - -# standard targets -##################################################################### - -.PHONY: all -all: clean dist - -.PHONY: setup -setup: - yarn - -.PHONY: clean -clean: - shx rm -rf dist - -# artifacts -##################################################################### - -.PHONY: dist -dist: export NODE_ENV := production -dist: - webpack --profile - -# NOTE: Ian 2018-09-07 while this is a one-off OT2 deckmap iframe dealie, -# it should be deployed MANUALLY to protocol-library-kludge/production/ on S3 - -# development -##################################################################### - -.PHONY: dev -dev: export NODE_ENV := development -dev: export NODE_OPTIONS := --openssl-legacy-provider -dev: - webpack-dev-server --hot --host=:: diff --git a/protocol-library-kludge/README.md b/protocol-library-kludge/README.md deleted file mode 100644 index 73918af0af8..00000000000 --- a/protocol-library-kludge/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Protocol Library Kludge - -This app provides an OT2 deck map component intended to be used in an iframe in Protocol Library. - -JSON data to set up labware and modules is passed in through the `data` URL param. - -# Example URL Params - -## Standard labware + magnetic module - -http://localhost:8080/?data=%7B%22labware%22:%7B%221%22:%7B%22labwareType%22:%22biorad_96_wellplate_200ul_pcr%22,%22name%22:%22Bio-Rad%2096%20Well%20Plate%20200%20%C2%B5L%20PCR%20on%20Magnetic%20Module%20on%201%22%7D,%222%22:%7B%22labwareType%22:%22biorad_96_wellplate_200ul_pcr%22,%22name%22:%22output%20plate%20on%202%22%7D,%223%22:%7B%22labwareType%22:%22opentrons_96_tiprack_1000ul%22,%22name%22:%22p1000%20tiprack%20on%203%22%7D,%225%22:%7B%22labwareType%22:%22opentrons_96_tiprack_1000ul%22,%22name%22:%22p1000%20tiprack%20on%205%22%7D,%227%22:%7B%22labwareType%22:%22usascientific_12_reservoir_22ml%22,%22name%22:%22reagent%20reservoir%20on%207%22%7D,%2212%22:%7B%22labwareType%22:%22opentrons_1_trash_1100ml_fixed%22,%22name%22:%22Opentrons%20Fixed%20Trash%20on%2012%22%7D%7D,%22modules%22%3A%7B%221%22%3A%20%22magneticModuleV1%22%7D%7D - -## Custom labware - -http://localhost:8080/?data=%7B%22labware%22:%7B%221%22:%7B%22labwareType%22:%22generic_96_tiprack_20ul%22,%22name%22:%22Custom%20200%C2%B5L%20Tiprack%20on%201%22%7D,%222%22:%7B%22labwareType%22:%22generic_96_tiprack_200ul%22,%22name%22:%22Custom%20200%C2%B5L%20Tiprack%20on%202%22%7D,%223%22:%7B%22labwareType%22:%22custom_96_tubeholder_500ul%22,%22name%22:%22Custom%20500ul%20Tube%20Holder%20on%203%22%7D,%2212%22:%7B%22labwareType%22:%22opentrons_1_trash_1100ml_fixed%22,%22name%22:%22Opentrons%20Fixed%20Trash%20on%2012%22%7D%7D,%22modules%22:%7B%7D%7D diff --git a/protocol-library-kludge/package.json b/protocol-library-kludge/package.json deleted file mode 100644 index db3c38648bd..00000000000 --- a/protocol-library-kludge/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "repository": { - "type": "git", - "url": "https://github.com/Opentrons/opentrons.git" - }, - "author": { - "name": "Opentrons Labworks", - "email": "engineering@opentrons.com" - }, - "name": "protocol-library-kludge", - "private": true, - "version": "0.0.0-dev", - "productName": "Opentrons Protocol Library", - "description": "Protocol library stuff (WIP)", - "main": "lib/index.js", - "types": "lib/index.d.ts", - "bugs": { - "url": "https://github.com/Opentrons/opentrons/issues" - }, - "homepage": "https://github.com/Opentrons/opentrons", - "license": "Apache-2.0", - "dependencies": { - "@opentrons/components": "link:../components", - "@opentrons/shared-data": "link:../shared-data", - "classnames": "2.2.5", - "lodash": "4.17.21", - "react": "18.2.0", - "react-dom": "18.2.0" - } -} diff --git a/protocol-library-kludge/src/App.tsx b/protocol-library-kludge/src/App.tsx deleted file mode 100644 index 12f1d2dd806..00000000000 --- a/protocol-library-kludge/src/App.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import * as React from 'react' -import { URLDeck } from './URLDeck' -import './globals.css' - -export function App(): JSX.Element { - return -} diff --git a/protocol-library-kludge/src/URLDeck.css b/protocol-library-kludge/src/URLDeck.css deleted file mode 100644 index 05baa1a0aca..00000000000 --- a/protocol-library-kludge/src/URLDeck.css +++ /dev/null @@ -1,7 +0,0 @@ -.labware_name_overlay { - opacity: 0; - - &:hover { - opacity: 1; - } -} diff --git a/protocol-library-kludge/src/URLDeck.tsx b/protocol-library-kludge/src/URLDeck.tsx deleted file mode 100644 index dbfffaf34a7..00000000000 --- a/protocol-library-kludge/src/URLDeck.tsx +++ /dev/null @@ -1,134 +0,0 @@ -import * as React from 'react' -import styles from './URLDeck.css' - -import { - RobotWorkSpace, - LabwareNameOverlay, - LabwareRender, - ModuleItem, - RobotCoordsForeignDiv, -} from '@opentrons/components' -import { getLatestLabwareDef } from './getLabware' -import { getDeckDefinitions } from '@opentrons/components/src/hardware-sim/Deck/getDeckDefinitions' -import type { ModuleModel, DeckSlotId } from '@opentrons/shared-data' - -// URI-encoded JSON expected as URL param "data" (eg `?data=...`) - -interface UrlData { - labware: Record< - DeckSlotId, - { - labwareType: string - name: string | null | undefined - } - > - modules: Record -} - -const DECK_DEF = getDeckDefinitions().ot2_standard - -const DECK_LAYER_BLOCKLIST = [ - 'calibrationMarkings', - 'fixedBase', - 'doorStops', - 'metalFrame', - 'removalHandle', - 'removableDeckOutline', - 'screwHoles', -] - -function getDataFromUrl(): UrlData | null { - try { - const urlData = new URLSearchParams(window.location.search).get('data') - - if (!urlData) { - console.error('No "data" param in URL') - return null - } - - return JSON.parse(urlData) - } catch (e) { - console.error('Failed to parse "data" URL param.', e) - return null - } -} - -export class URLDeck extends React.Component<{}> { - urlData: UrlData | null - - constructor() { - // @ts-expect-error(sa, 2021-7-8): call super with props - super() - this.urlData = getDataFromUrl() - } - - render(): JSX.Element { - const labwareBySlot = this.urlData?.labware - const modulesBySlot = this.urlData?.modules - - return ( - - {({ deckSlotsById }): Array => - Object.keys(deckSlotsById).map((slotId): JSX.Element | null => { - const slot = deckSlotsById[slotId] - if (!slot.matingSurfaceUnitVector) return null // if slot has no mating surface, don't render anything in it - const moduleModel = modulesBySlot && modulesBySlot[slotId] - const labware = labwareBySlot && labwareBySlot[slotId] - const labwareDefV2 = - labware && getLatestLabwareDef(labware.labwareType) - let labwareDisplayType: string | null = null - if (labwareDefV2) { - labwareDisplayType = labwareDefV2.metadata.displayName - } else { - labwareDisplayType = labware?.labwareType || null - } - - return ( - - {moduleModel && ( - - - - )} - {labware && ( - - {labwareDefV2 ? ( - - ) : null} - - )} - {labware && ( - - - - )} - - ) - }) - } - - ) - } -} diff --git a/protocol-library-kludge/src/getLabware.ts b/protocol-library-kludge/src/getLabware.ts deleted file mode 100644 index 96f8e0d39e2..00000000000 --- a/protocol-library-kludge/src/getLabware.ts +++ /dev/null @@ -1,75 +0,0 @@ -// HACK: IL 2019-11-25 this file is copied from Run App -import groupBy from 'lodash/groupBy' -import type { - LabwareDefinition1, - LabwareDefinition2, -} from '@opentrons/shared-data' - -// require all definitions in the labware/definitions/1 directory -const labwareSchemaV1DefsContext = require.context( - '@opentrons/shared-data/labware/definitions/1', - true, // traverse subdirectories - /\.json$/, // import filter - 'sync' // load every definition into one synchronous chunk -) -let labwareSchemaV1Defs: Readonly | null = null -function getLegacyLabwareDefs(): Readonly { - if (!labwareSchemaV1Defs) { - labwareSchemaV1Defs = labwareSchemaV1DefsContext - .keys() - .map(name => labwareSchemaV1DefsContext(name)) - } - - return labwareSchemaV1Defs -} - -export function getLegacyLabwareDef( - loadName: string | null | undefined -): LabwareDefinition1 | null { - const def = getLegacyLabwareDefs().find(d => d.metadata.name === loadName) - return def || null -} - -// require all definitions in the labware/definitions/2 directory -const labwareSchemaV2DefsContext = require.context( - '@opentrons/shared-data/labware/definitions/2', - true, // traverse subdirectories - /\.json$/, // import filter - 'sync' // load every definition into one synchronous chunk -) - -let labwareSchemaV2Defs: Readonly | null = null -function getLatestLabwareDefs(): Readonly { - // NOTE: unlike labware-library, no filtering out "do not list labware" - // also, more convenient & performant to make a map {loadName: def} not an array - if (!labwareSchemaV2Defs) { - const allDefs = labwareSchemaV2DefsContext - .keys() - .map(name => labwareSchemaV2DefsContext(name)) - // group by namespace + loadName - const labwareDefGroups: { - [groupKey: string]: LabwareDefinition2[] - } = groupBy(allDefs, d => `${d.namespace}/${d.parameters.loadName}`) - - labwareSchemaV2Defs = Object.keys(labwareDefGroups).map( - (groupKey: string) => { - const group = labwareDefGroups[groupKey] - const allVersions = group.map(d => d.version) - const highestVersionNum = Math.max(...allVersions) - const resultIdx = group.findIndex(d => d.version === highestVersionNum) - return group[resultIdx] - } - ) - } - - return labwareSchemaV2Defs -} - -export function getLatestLabwareDef( - loadName: string | null | undefined -): LabwareDefinition2 | null { - const def = getLatestLabwareDefs().find( - d => d.parameters.loadName === loadName - ) - return def || null -} diff --git a/protocol-library-kludge/src/globals.css b/protocol-library-kludge/src/globals.css deleted file mode 100644 index 6ada1dc286f..00000000000 --- a/protocol-library-kludge/src/globals.css +++ /dev/null @@ -1,3 +0,0 @@ -* { - font-family: 'Open Sans', sans-serif; -} diff --git a/protocol-library-kludge/src/index.hbs b/protocol-library-kludge/src/index.hbs deleted file mode 100644 index ab68be76554..00000000000 --- a/protocol-library-kludge/src/index.hbs +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - {{htmlWebpackPlugin.options.title}} - - - - -
- - diff --git a/protocol-library-kludge/src/index.tsx b/protocol-library-kludge/src/index.tsx deleted file mode 100644 index 25ccf009a68..00000000000 --- a/protocol-library-kludge/src/index.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import * as React from 'react' -import ReactDOM from 'react-dom/client' -import { App } from './App' - -const container = document.getElementById('root') - -if (container == null) throw new Error('Failed to find the root element') -const root = ReactDOM.createRoot(container) - -root.render() diff --git a/protocol-library-kludge/tsconfig.json b/protocol-library-kludge/tsconfig.json deleted file mode 100644 index cd8628020c7..00000000000 --- a/protocol-library-kludge/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": "../tsconfig-base.json", - "references": [ - { - "path": "../components" - }, - { - "path": "../shared-data" - } - ], - "compilerOptions": { - "composite": true, - "rootDir": "src", - "outDir": "lib" - }, - "include": ["typings", "src"] -} diff --git a/protocol-library-kludge/typings/css-modules.d.ts b/protocol-library-kludge/typings/css-modules.d.ts deleted file mode 100644 index 6f4c90dd90b..00000000000 --- a/protocol-library-kludge/typings/css-modules.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module '*.css' { - const styles: { [key: string]: string } - // eslint-disable-next-line import/no-default-export - export default styles -} diff --git a/protocol-library-kludge/webpack.config.js b/protocol-library-kludge/webpack.config.js deleted file mode 100644 index 195a00cbc53..00000000000 --- a/protocol-library-kludge/webpack.config.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict' - -const path = require('path') -const webpackMerge = require('webpack-merge') -const HtmlWebpackPlugin = require('html-webpack-plugin') -const ScriptExtHtmlWebpackPlugin = require('script-ext-html-webpack-plugin') - -const { DEV_MODE, baseConfig } = require('@opentrons/webpack-config') -const { productName: title, description, author } = require('./package.json') - -const JS_BUNDLE_ENTRY = path.join(__dirname, 'src/index.tsx') -const HTML_ENTRY = path.join(__dirname, 'src/index.hbs') -const OUTPUT_PATH = path.join(__dirname, 'dist') - -module.exports = webpackMerge(baseConfig, { - entry: [JS_BUNDLE_ENTRY], - - output: { - path: OUTPUT_PATH, - publicPath: DEV_MODE ? '' : './', - }, - - plugins: [ - new HtmlWebpackPlugin({ title, description, author, template: HTML_ENTRY }), - new ScriptExtHtmlWebpackPlugin({ defaultAttribute: 'defer' }), - ], -}) diff --git a/tsconfig-eslint.json b/tsconfig-eslint.json index 11672e612c6..192a8669d51 100644 --- a/tsconfig-eslint.json +++ b/tsconfig-eslint.json @@ -29,8 +29,6 @@ "step-generation/typings", "protocol-designer/src", "protocol-designer/typings", - "protocol-library-kludge/src", - "protocol-library-kludge/typings", "api-client/src", "react-api-client/src", "usb-bridge/node-client/src" diff --git a/tsconfig.json b/tsconfig.json index f27d80b162c..86ef965328e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -31,9 +31,6 @@ { "path": "./protocol-designer" }, - { - "path": "./protocol-library-kludge" - }, { "path": "./api-client" },