You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

33 lines
999 B

  1. import { OptionRepository } from '@/domain/models/option/optionRepository'
  2. import { OptionItem } from '@/domain/models/option/option'
  3. function toPayload(item: OptionItem): { [key: string]: any } {
  4. return {
  5. page: item.page,
  6. q: item.q,
  7. isChecked: item.isChecked
  8. }
  9. }
  10. export class LocalStorageOptionRepository implements OptionRepository {
  11. findById(projectId: string): OptionItem {
  12. const checkpoint = this.loadCheckpoint()
  13. if (checkpoint[projectId]) {
  14. const option = checkpoint[projectId]
  15. return new OptionItem(option.page, option.q, option.isChecked)
  16. } else {
  17. return new OptionItem(1)
  18. }
  19. }
  20. save(projectId: string, option: OptionItem): void {
  21. const checkpoint = this.loadCheckpoint()
  22. checkpoint[projectId] = toPayload(option)
  23. localStorage.setItem('checkpoint', JSON.stringify(checkpoint))
  24. }
  25. loadCheckpoint(): { [key: string]: any } {
  26. const item = localStorage.getItem('checkpoint') || '{}'
  27. return JSON.parse(item)
  28. }
  29. }