Add units as inline annotation on file creation
This commit is contained in:
		@ -31,6 +31,9 @@ import { useSettingsAuthContext } from 'hooks/useSettingsAuthContext'
 | 
			
		||||
import { markOnce } from 'lib/performance'
 | 
			
		||||
import { commandBarActor } from 'machines/commandBarMachine'
 | 
			
		||||
import { useToken } from 'machines/appMachine'
 | 
			
		||||
import { unit } from '@kittycad/lib/dist/types/src'
 | 
			
		||||
import { changeKclSettings, unitLengthToUnitLen } from 'lang/wasm'
 | 
			
		||||
import { err } from 'lib/trap'
 | 
			
		||||
 | 
			
		||||
type MachineContext<T extends AnyStateMachine> = {
 | 
			
		||||
  state: StateFrom<T>
 | 
			
		||||
@ -96,8 +99,8 @@ export const FileMachineProvider = ({
 | 
			
		||||
            navigate(
 | 
			
		||||
              `..${PATHS.FILE}/${encodeURIComponent(
 | 
			
		||||
                context.selectedDirectory +
 | 
			
		||||
                  window.electron.path.sep +
 | 
			
		||||
                  event.output.name
 | 
			
		||||
                window.electron.path.sep +
 | 
			
		||||
                event.output.name
 | 
			
		||||
              )}`
 | 
			
		||||
            )
 | 
			
		||||
          } else if (
 | 
			
		||||
@ -159,7 +162,12 @@ export const FileMachineProvider = ({
 | 
			
		||||
                createdPath
 | 
			
		||||
              )
 | 
			
		||||
            } else {
 | 
			
		||||
              await window.electron.writeFile(createdPath, input.content ?? '')
 | 
			
		||||
              const codeToWrite = changeKclSettings(input.content ?? '', {
 | 
			
		||||
                defaultLengthUnits: unitLengthToUnitLen(settings.context.modeling.defaultUnit.current),
 | 
			
		||||
                defaultAngleUnits: { type: 'Degrees' },
 | 
			
		||||
              })
 | 
			
		||||
              if (err(codeToWrite)) return Promise.reject(codeToWrite)
 | 
			
		||||
              await window.electron.writeFile(createdPath, codeToWrite)
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
@ -188,7 +196,13 @@ export const FileMachineProvider = ({
 | 
			
		||||
            })
 | 
			
		||||
            createdName = name
 | 
			
		||||
            createdPath = path
 | 
			
		||||
            await window.electron.writeFile(createdPath, input.content ?? '')
 | 
			
		||||
 | 
			
		||||
            const codeToWrite = changeKclSettings(input.content ?? '', {
 | 
			
		||||
              defaultLengthUnits: unitLengthToUnitLen(settings.context.modeling.defaultUnit.current),
 | 
			
		||||
              defaultAngleUnits: { type: 'Degrees' },
 | 
			
		||||
            })
 | 
			
		||||
            if (err(codeToWrite)) return Promise.reject(codeToWrite)
 | 
			
		||||
            await window.electron.writeFile(createdPath, codeToWrite)
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          return {
 | 
			
		||||
@ -302,9 +316,8 @@ export const FileMachineProvider = ({
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          return {
 | 
			
		||||
            message: `Successfully deleted ${isDir ? 'folder' : 'file'} "${
 | 
			
		||||
              input.name
 | 
			
		||||
            }"`,
 | 
			
		||||
            message: `Successfully deleted ${isDir ? 'folder' : 'file'} "${input.name
 | 
			
		||||
              }"`,
 | 
			
		||||
          }
 | 
			
		||||
        }),
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
@ -32,6 +32,8 @@ import {
 | 
			
		||||
} from 'lib/constants'
 | 
			
		||||
import { codeManager, kclManager } from 'lib/singletons'
 | 
			
		||||
import { Project } from 'lib/project'
 | 
			
		||||
import { changeKclSettings, unitLengthToUnitLen } from 'lang/wasm'
 | 
			
		||||
import { err } from 'lib/trap'
 | 
			
		||||
 | 
			
		||||
type MachineContext<T extends AnyStateMachine> = {
 | 
			
		||||
  state?: StateFrom<T>
 | 
			
		||||
@ -84,25 +86,25 @@ const ProjectsContextWeb = ({ children }: { children: React.ReactNode }) => {
 | 
			
		||||
  const [state, send, actor] = useMachine(
 | 
			
		||||
    projectsMachine.provide({
 | 
			
		||||
      actions: {
 | 
			
		||||
        navigateToProject: () => {},
 | 
			
		||||
        navigateToProjectIfNeeded: () => {},
 | 
			
		||||
        navigateToFile: () => {},
 | 
			
		||||
        navigateToProject: () => { },
 | 
			
		||||
        navigateToProjectIfNeeded: () => { },
 | 
			
		||||
        navigateToFile: () => { },
 | 
			
		||||
        toastSuccess: ({ event }) =>
 | 
			
		||||
          toast.success(
 | 
			
		||||
            ('data' in event && typeof event.data === 'string' && event.data) ||
 | 
			
		||||
              ('output' in event &&
 | 
			
		||||
                'message' in event.output &&
 | 
			
		||||
                typeof event.output.message === 'string' &&
 | 
			
		||||
                event.output.message) ||
 | 
			
		||||
              ''
 | 
			
		||||
            ('output' in event &&
 | 
			
		||||
              'message' in event.output &&
 | 
			
		||||
              typeof event.output.message === 'string' &&
 | 
			
		||||
              event.output.message) ||
 | 
			
		||||
            ''
 | 
			
		||||
          ),
 | 
			
		||||
        toastError: ({ event }) =>
 | 
			
		||||
          toast.error(
 | 
			
		||||
            ('data' in event && typeof event.data === 'string' && event.data) ||
 | 
			
		||||
              ('output' in event &&
 | 
			
		||||
                typeof event.output === 'string' &&
 | 
			
		||||
                event.output) ||
 | 
			
		||||
              ''
 | 
			
		||||
            ('output' in event &&
 | 
			
		||||
              typeof event.output === 'string' &&
 | 
			
		||||
              event.output) ||
 | 
			
		||||
            ''
 | 
			
		||||
          ),
 | 
			
		||||
      },
 | 
			
		||||
      actors: {
 | 
			
		||||
@ -122,7 +124,12 @@ const ProjectsContextWeb = ({ children }: { children: React.ReactNode }) => {
 | 
			
		||||
        createFile: fromPromise(async ({ input }) => {
 | 
			
		||||
          // Browser version doesn't navigate, just overwrites the current file
 | 
			
		||||
          clearImportSearchParams()
 | 
			
		||||
          codeManager.updateCodeStateEditor(input.code || '')
 | 
			
		||||
          const codeToWrite = changeKclSettings(input.code ?? '', {
 | 
			
		||||
            defaultLengthUnits: unitLengthToUnitLen(settings.context.modeling.defaultUnit.current),
 | 
			
		||||
            defaultAngleUnits: { type: 'Degrees' },
 | 
			
		||||
          })
 | 
			
		||||
          if (err(codeToWrite)) return Promise.reject(codeToWrite)
 | 
			
		||||
          codeManager.updateCodeStateEditor(codeToWrite)
 | 
			
		||||
          await codeManager.writeToFile()
 | 
			
		||||
          await kclManager.executeCode(true)
 | 
			
		||||
 | 
			
		||||
@ -298,19 +305,19 @@ const ProjectsContextDesktop = ({
 | 
			
		||||
        toastSuccess: ({ event }) =>
 | 
			
		||||
          toast.success(
 | 
			
		||||
            ('data' in event && typeof event.data === 'string' && event.data) ||
 | 
			
		||||
              ('output' in event &&
 | 
			
		||||
                'message' in event.output &&
 | 
			
		||||
                typeof event.output.message === 'string' &&
 | 
			
		||||
                event.output.message) ||
 | 
			
		||||
              ''
 | 
			
		||||
            ('output' in event &&
 | 
			
		||||
              'message' in event.output &&
 | 
			
		||||
              typeof event.output.message === 'string' &&
 | 
			
		||||
              event.output.message) ||
 | 
			
		||||
            ''
 | 
			
		||||
          ),
 | 
			
		||||
        toastError: ({ event }) =>
 | 
			
		||||
          toast.error(
 | 
			
		||||
            ('data' in event && typeof event.data === 'string' && event.data) ||
 | 
			
		||||
              ('output' in event &&
 | 
			
		||||
                typeof event.output === 'string' &&
 | 
			
		||||
                event.output) ||
 | 
			
		||||
              ''
 | 
			
		||||
            ('output' in event &&
 | 
			
		||||
              typeof event.output === 'string' &&
 | 
			
		||||
              event.output) ||
 | 
			
		||||
            ''
 | 
			
		||||
          ),
 | 
			
		||||
      },
 | 
			
		||||
      actors: {
 | 
			
		||||
@ -374,8 +381,8 @@ const ProjectsContextDesktop = ({
 | 
			
		||||
            input.method === 'newProject'
 | 
			
		||||
              ? PROJECT_ENTRYPOINT
 | 
			
		||||
              : input.name.endsWith(FILE_EXT)
 | 
			
		||||
              ? input.name
 | 
			
		||||
              : input.name + FILE_EXT
 | 
			
		||||
                ? input.name
 | 
			
		||||
                : input.name + FILE_EXT
 | 
			
		||||
          let message = 'File created successfully'
 | 
			
		||||
 | 
			
		||||
          const needsInterpolated = doesProjectNameNeedInterpolated(projectName)
 | 
			
		||||
@ -406,7 +413,12 @@ const ProjectsContextDesktop = ({
 | 
			
		||||
          })
 | 
			
		||||
 | 
			
		||||
          fileName = name
 | 
			
		||||
          await window.electron.writeFile(path, input.code || '')
 | 
			
		||||
          const codeToWrite = changeKclSettings(input.code ?? '', {
 | 
			
		||||
            defaultLengthUnits: unitLengthToUnitLen(settings.context.modeling.defaultUnit.current),
 | 
			
		||||
            defaultAngleUnits: { type: 'Degrees' },
 | 
			
		||||
          })
 | 
			
		||||
          if (err(codeToWrite)) return Promise.reject(codeToWrite)
 | 
			
		||||
          await window.electron.writeFile(path, codeToWrite)
 | 
			
		||||
 | 
			
		||||
          return {
 | 
			
		||||
            message,
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user