* start of settings types Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * add validator Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * start of settings in rust Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix wasm Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix wasm Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * more tests Signed-off-by: Jess Frazelle <github@jessfraz.com> * derive docs Signed-off-by: Jess Frazelle <github@jessfraz.com> * configuration Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * read and write functions with migration Signed-off-by: Jess Frazelle <github@jessfraz.com> * make more dry Signed-off-by: Jess Frazelle <github@jessfraz.com> * more parsing of app settings Signed-off-by: Jess Frazelle <github@jessfraz.com> * more things Signed-off-by: Jess Frazelle <github@jessfraz.com> * cleanup Signed-off-by: Jess Frazelle <github@jessfraz.com> * trim end Signed-off-by: Jess Frazelle <github@jessfraz.com> * project settings Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix Signed-off-by: Jess Frazelle <github@jessfraz.com> * fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> * fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> * cleanup tauri commands Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * refactor Signed-off-by: Jess Frazelle <github@jessfraz.com> * refactor Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * change to files Signed-off-by: Jess Frazelle <github@jessfraz.com> * better Signed-off-by: Jess Frazelle <github@jessfraz.com> * cleanup more Signed-off-by: Jess Frazelle <github@jessfraz.com> * get rid of dead code Signed-off-by: Jess Frazelle <github@jessfraz.com> * fixed Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * cleanup some more shit Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * add validation Signed-off-by: Jess Frazelle <github@jessfraz.com> * validation Signed-off-by: Jess Frazelle <github@jessfraz.com> * validate Signed-off-by: Jess Frazelle <github@jessfraz.com> * validate Signed-off-by: Jess Frazelle <github@jessfraz.com> * clippuy Signed-off-by: Jess Frazelle <github@jessfraz.com> * clippuy Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix; Signed-off-by: Jess Frazelle <github@jessfraz.com> --------- Signed-off-by: Jess Frazelle <github@jessfraz.com>
179 lines
5.5 KiB
TypeScript
179 lines
5.5 KiB
TypeScript
import { assign, createMachine } from 'xstate'
|
|
import type { FileEntry } from 'lib/types'
|
|
import { Project } from 'wasm-lib/kcl/bindings/Project'
|
|
|
|
export const fileMachine = createMachine(
|
|
{
|
|
/** @xstate-layout N4IgpgJg5mDOIC5QDECWAbMACAtgQwGMALVAOzAGI9ZZUpSBtABgF1FQAHAe1oBdUupdiAAeiAKwBGcQDoALACYAHAE4AzGoUA2JXK1yANCACeiabOmSlGpkqsqAvg6NpMuQiXIyAEtSykuLAAzDDgKAGEAJzA8XmwQzGY2JBBuPgEhFLEESTVxWS1xBWVVcTU5PXEjUwRNFRkFWwB2FQVxJia5JnE5JxdQ92IyMB8-BLCAJTBSPBx40KThNNR+QWFslSVZJS1u3TUVSR1xJurEXSYZJslipismbTklPpBXbHwhr19YYNDYCOisXmiVYSx4Kwy6zMeQKRRKKjKFUKZwQPXqkjkmjUTCYWi0TQOCheb0GnhG31+mH+ABEwJg4pSwIsUstVplQNlcvkZIVikpSuVKijdFoZOItJJpEomtcYUTnK8Bh8yaMfuN-gB5DjTRnMzjgtlQnIwnlw-kIwXIkyIdSSGRKHF5XFqSwdYlKjzDVWM-4AZTAvCwsDpYAIcQgWAgqGiYa4kWMetSBshWTMNyaMkOuV0ChUBJUEpRnUuux6WmxGkkTF6CpJyq9URi-FIUEZFAgghGZAAblwANYjAiAuIAWnGidZKY50O5vPhiKF1oQcnF9q0myYCN2FSa4ndbnrXkbsTIrfGFDAkUicZkHHQsSCcZwMiHTbAY4WoJZybWqeNq82ddygUaQHiqJc7BkTRcwUOQjmKHR133d5PS8KYZhwU82w7Lwe37EZogw99xy-fV0l-adalzeQVForY1Ada4ni0FE5CaJRM0UAlmm6LRkNJL10NmLDz0va9Ilve9eEfSJn0I2ZiM-ZIyIhCjREQOoaLospGIxHYUQY0U8VaVoJUdB5+MPEZaXpETQnbTsZDwgcZAgENRxI5Sk3I9l1P-UVci6cUbg0JRlBRcRNkzHRdwUGVaPEOxLNQ6z3LszALyvG87wfJ9XPcxSQS8yc1M5PIMz0aU7gYuQCyOIsegaaUCTCwpnT42sPU+EYpjwKMWx9BzcNIXsXMBCAPypCcf187I7DUGQqweWDGgJNR8SLJ55AY9ibgLPJy2S7qZF6-qzz+IauxG-CZHGya4AYSRipmo15sWnFikUDoNA2pcXVkBQbFo7FuMkJojpVU70rCMTsqkmS5JiCb1WmnzXtyd7lq+tbfpqYoFEzSL9DqNofo6-oDxSigpiCaJYCIVHVNmxAtEaBpyxuZQ8iOaQUTBjNpWJxo2l3TpnheAI3PgFI6xSsE0b-EcWKXJWZBxHF2hAip0ySzrKeOikAh9eWmaNSVriappqy2CpWkkAzqLUJp8Q5h4DgRGsKZQg2xj+E3DT-c2OIlGVdwqFc4rUYUuntB0wesaQmhAvc9e9lVj2bc7MH9qc-OkNjMwFfkygLWqIpxe0cTsWCOiOE4IcE6ZhIG8Yc9KxBFFYlp5EkWirFB6Q1AbrwbIDaG2+ZnIegzTYLWLg59BUYUmAWwHKo3B51HlL2BLQpHoellSA8oooOOsSLGiRdowdY2r7RWu5OhdQLycVfWVS1aZx+-BXKPzmei70VLkvJcKhbBijKHicq3QQLiycEAA */
|
|
id: 'File machine',
|
|
|
|
initial: 'Reading files',
|
|
|
|
context: {
|
|
project: {} as Project,
|
|
selectedDirectory: {} as FileEntry,
|
|
},
|
|
|
|
on: {
|
|
assign: {
|
|
actions: assign((_, event) => ({
|
|
...event.data,
|
|
})),
|
|
target: '.Reading files',
|
|
},
|
|
|
|
Refresh: '.Reading files',
|
|
},
|
|
states: {
|
|
'Has no files': {
|
|
on: {
|
|
'Create file': {
|
|
target: 'Creating file',
|
|
},
|
|
},
|
|
},
|
|
|
|
'Has files': {
|
|
on: {
|
|
'Rename file': {
|
|
target: 'Renaming file',
|
|
},
|
|
|
|
'Create file': {
|
|
target: 'Creating file',
|
|
},
|
|
|
|
'Delete file': {
|
|
target: 'Deleting file',
|
|
},
|
|
|
|
'Open file': {
|
|
target: 'Opening file',
|
|
},
|
|
|
|
'Set selected directory': {
|
|
target: 'Has files',
|
|
actions: ['setSelectedDirectory'],
|
|
},
|
|
},
|
|
},
|
|
|
|
'Creating file': {
|
|
invoke: {
|
|
id: 'create-file',
|
|
src: 'createFile',
|
|
onDone: [
|
|
{
|
|
target: 'Reading files',
|
|
actions: ['toastSuccess'],
|
|
},
|
|
],
|
|
onError: [
|
|
{
|
|
target: 'Reading files',
|
|
actions: ['toastError'],
|
|
},
|
|
],
|
|
},
|
|
},
|
|
|
|
'Renaming file': {
|
|
invoke: {
|
|
id: 'rename-file',
|
|
src: 'renameFile',
|
|
onDone: [
|
|
{
|
|
target: '#File machine.Reading files',
|
|
actions: ['toastSuccess'],
|
|
},
|
|
],
|
|
onError: [
|
|
{
|
|
target: '#File machine.Reading files',
|
|
actions: ['toastError'],
|
|
},
|
|
],
|
|
},
|
|
},
|
|
|
|
'Deleting file': {
|
|
invoke: {
|
|
id: 'delete-file',
|
|
src: 'deleteFile',
|
|
onDone: [
|
|
{
|
|
actions: ['toastSuccess'],
|
|
target: '#File machine.Reading files',
|
|
},
|
|
],
|
|
onError: {
|
|
actions: ['toastError'],
|
|
target: '#File machine.Has files',
|
|
},
|
|
},
|
|
},
|
|
|
|
'Reading files': {
|
|
invoke: {
|
|
id: 'read-files',
|
|
src: 'readFiles',
|
|
onDone: [
|
|
{
|
|
cond: 'Has at least 1 file',
|
|
target: 'Has files',
|
|
actions: ['setFiles'],
|
|
},
|
|
{
|
|
target: 'Has no files',
|
|
actions: ['setFiles'],
|
|
},
|
|
],
|
|
onError: [
|
|
{
|
|
target: 'Has no files',
|
|
actions: ['toastError'],
|
|
},
|
|
],
|
|
},
|
|
},
|
|
|
|
'Opening file': {
|
|
entry: ['navigateToFile'],
|
|
},
|
|
},
|
|
|
|
schema: {
|
|
events: {} as
|
|
| { type: 'Open file'; data: { name: string } }
|
|
| {
|
|
type: 'Rename file'
|
|
data: { oldName: string; newName: string; isDir: boolean }
|
|
}
|
|
| { type: 'Create file'; data: { name: string; makeDir: boolean } }
|
|
| { type: 'Delete file'; data: FileEntry }
|
|
| { type: 'Set selected directory'; data: FileEntry }
|
|
| { type: 'navigate'; data: { name: string } }
|
|
| {
|
|
type: 'done.invoke.read-files'
|
|
data: Project
|
|
}
|
|
| { type: 'assign'; data: { [key: string]: any } }
|
|
| { type: 'Refresh' },
|
|
},
|
|
|
|
predictableActionArguments: true,
|
|
preserveActionOrder: true,
|
|
tsTypes: {} as import('./fileMachine.typegen').Typegen0,
|
|
},
|
|
{
|
|
actions: {
|
|
setFiles: assign((_, event) => {
|
|
return { project: event.data }
|
|
}),
|
|
setSelectedDirectory: assign((_, event) => {
|
|
return { selectedDirectory: event.data }
|
|
}),
|
|
},
|
|
}
|
|
)
|