Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F7687655
drafts.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Size
2 KB
Referenced Files
None
Subscribers
None
drafts.js
View Options
import
{
storage
}
from
'src/lib/storage.js'
export
const
defaultState
=
{
drafts
:
{}
}
export
const
mutations
=
{
addOrSaveDraft
(
state
,
{
draft
})
{
state
.
drafts
[
draft
.
id
]
=
draft
},
abandonDraft
(
state
,
{
id
})
{
delete
state
.
drafts
[
id
]
},
loadDrafts
(
state
,
data
)
{
state
.
drafts
=
data
}
}
const
storageKey
=
'pleroma-fe-drafts'
/*
* Note: we do not use the persist state plugin because
* it is not impossible for a user to have two windows at
* the same time. The persist state plugin is just overriding
* everything with the current state. This isn't good because
* if a draft is created in one window and another draft is
* created in another, the draft in the first window will just
* be overriden.
* Here, we can't guarantee 100% atomicity unless one uses
* different keys, which will just pollute the whole storage.
* It is indeed best to have backend support for this.
*/
const
getStorageData
=
async
()
=>
((
await
storage
.
getItem
(
storageKey
))
||
{})
const
saveDraftToStorage
=
async
(
draft
)
=>
{
const
currentData
=
await
getStorageData
()
currentData
[
draft
.
id
]
=
JSON
.
parse
(
JSON
.
stringify
(
draft
))
await
storage
.
setItem
(
storageKey
,
currentData
)
}
const
deleteDraftFromStorage
=
async
(
id
)
=>
{
const
currentData
=
await
getStorageData
()
delete
currentData
[
id
]
await
storage
.
setItem
(
storageKey
,
currentData
)
}
export
const
actions
=
{
async
addOrSaveDraft
(
store
,
{
draft
})
{
const
id
=
draft
.
id
||
(
new
Date
().
getTime
()).
toString
()
const
draftWithId
=
{
...
draft
,
id
}
store
.
commit
(
'addOrSaveDraft'
,
{
draft
:
draftWithId
})
await
saveDraftToStorage
(
draftWithId
)
return
id
},
async
abandonDraft
(
store
,
{
id
})
{
store
.
commit
(
'abandonDraft'
,
{
id
})
await
deleteDraftFromStorage
(
id
)
},
async
loadDrafts
(
store
)
{
const
currentData
=
await
getStorageData
()
store
.
commit
(
'loadDrafts'
,
currentData
)
}
}
export
const
getters
=
{
draftsByTypeAndRefId
(
state
)
{
return
(
type
,
refId
)
=>
{
return
Object
.
values
(
state
.
drafts
).
filter
(
draft
=>
draft
.
type
===
type
&&
draft
.
refId
===
refId
)
}
},
draftsArray
(
state
)
{
return
Object
.
values
(
state
.
drafts
)
},
draftCount
(
state
)
{
return
Object
.
values
(
state
.
drafts
).
length
}
}
const
drafts
=
{
state
:
defaultState
,
mutations
,
getters
,
actions
}
export
default
drafts
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Sep 3, 10:45 PM (1 d, 9 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
439337
Default Alt Text
drafts.js (2 KB)
Attached To
Mode
rPUFE pleroma-fe-upstream
Attached
Detach File
Event Timeline
Log In to Comment