1+ <template >
2+ <div class =" navbar-item has-dropdown is-hoverable" dir =" rtl" >
3+ <a class =" navbar-link" > קובץ </a >
4+
5+ <div class =" navbar-dropdown" >
6+ <a class =" navbar-item" > טעינה </a >
7+ <a v-if =" !saving" class =" navbar-item" :class =" {'is-disabled': !canSave}" @click =" onSave" > שמירה </a >
8+ <div class =" navbar-item" v-if =" saving" >
9+ <button class =" navbar-item button is-loading" v-if =" saving" disabled >
10+ שמירה
11+ </button >
12+ </div >
13+ <a class =" navbar-item" :class =" {'is-disabled': !canSaveAs}" @click =" displaySaveAs" >
14+ שמירה בשם
15+ </a >
16+ <hr class =" navbar-divider" />
17+ <a class =" navbar-item" > שיתוף </a >
18+ </div >
19+ </div >
20+ <div class =" modal" :class =" { 'is-active': showSaveAsMenu }" >
21+ <div class =" modal-background" @click =" closeSaveAsMenu" ></div >
22+ <div class =" modal-content" >
23+ <save-as-modal @close =" closeSaveAsMenu" />
24+ </div >
25+ <button
26+ class =" modal-close is-large"
27+ aria-label =" close"
28+ @click =" closeSaveAsMenu"
29+ ></button >
30+ </div >
31+ </template >
32+
33+ <script >
34+ import { computed , ref } from " vue" ;
35+ import SaveAsModal from " @/components/SaveAsModal.vue" ;
36+ import { currentCourseplan , isDirty , save } from " @/course-store.js" ;
37+ export default {
38+ components: { SaveAsModal },
39+ setup (props ) {
40+ const canSave = isDirty;
41+ const canSaveAs = computed (() => currentCourseplan .value !== null );
42+ const showSaveAsMenu = ref (false );
43+
44+ const displaySaveAs = () => {
45+ showSaveAsMenu .value = true ;
46+ };
47+ const closeSaveAsMenu = () => (showSaveAsMenu .value = false );
48+
49+ const saving = ref (false );
50+ const onSave = async () => {
51+ if (currentCourseplan == null ) {
52+ displaySaveAs ();
53+ } else {
54+ saving .value = true ;
55+ try {
56+ await save ();
57+ } finally {
58+ saving .value = false ;
59+ }
60+ }
61+ };
62+
63+ return {
64+ canSave,
65+ canSaveAs,
66+ showSaveAsMenu,
67+ onSave,
68+ displaySaveAs,
69+ closeSaveAsMenu,
70+ saving,
71+ };
72+ },
73+ };
74+ </script >
75+
76+ <style scoped>
77+ a .is-disabled {
78+ pointer-events : none ;
79+ opacity : .65 ;
80+ }
81+ </style >
0 commit comments