@@ -39,7 +39,13 @@ class="group relative h-[18px] !w-full pl-2.5"
39
39
: style= " { 'text-align': position }"
40
40
>
41
41
< span class = " cursor-pointer truncate rounded" >
42
- @ {{ valueLabel ? valueLabel : inputValue .length > 20 ? inputValue .substring (0 , 20 ) + ' ...' : inputValue }}
42
+ < template v- if = " isDirty" >
43
+ @ {{ inputValue .length > 20 ? inputValue .substring (0 , 20 ) + ' ...' : inputValue }}
44
+ < / template>
45
+
46
+ < template v- else >
47
+ @ {{ valueLabel ? valueLabel : inputValue .length > 20 ? inputValue .substring (0 , 20 ) + ' ...' : inputValue }}
48
+ < / template>
43
49
< / span>
44
50
45
51
<!-- Tooltip -->
@@ -62,7 +68,7 @@ class="icon-edit cursor-pointer rounded p-0.5 text-2xl opacity-0 hover:bg-gray-2
62
68
>< / i>
63
69
< / template>
64
70
< / div>
65
-
71
+
66
72
<!-- Editing view -->
67
73
< div
68
74
class = " relative flex w-full flex-col"
@@ -75,7 +81,7 @@ class="relative flex w-full flex-col"
75
81
class = " !h-[34px] w-full cursor-pointer !py-0 text-gray-800 dark:text-white ltr:pr-20 rtl:pl-20"
76
82
:: placeholder= " placeholder"
77
83
v- model= " selectedItem.name"
78
- @click = " toggleEditor"
84
+ @click = " toggleEditor"
79
85
readonly
80
86
/ >
81
87
@@ -87,17 +93,17 @@ class="relative"
87
93
>
88
94
< x- admin:: spinner / >
89
95
< / div>
90
-
91
- < i
96
+
97
+ < i
92
98
class = " text-2xl"
93
99
: class = " showPopup ? 'icon-up-arrow': 'icon-down-arrow'"
94
100
>< / i>
95
101
< / div>
96
102
< / span>
97
-
103
+
98
104
<!-- Popup Box -->
99
- < div
100
- v- if = " showPopup"
105
+ < div
106
+ v- if = " showPopup"
101
107
class = " absolute z-10 mt-1 w-full origin-top transform rounded-lg border border-gray-200 bg-white p-2 shadow-lg transition-transform dark:border-gray-800 dark:bg-gray-800"
102
108
: class = " dropdownPosition === 'bottom' ? 'top-full mt-1' : 'bottom-full mb-1'"
103
109
>
@@ -110,24 +116,24 @@ class="!mb-2 w-full rounded border border-gray-200 px-2.5 py-2 text-sm font-norm
110
116
placeholder= " @lang (' admin::app.components.lookup.search' )"
111
117
ref= " searchInput"
112
118
/ >
113
-
119
+
114
120
<!-- Results List -->
115
121
< ul class = " max-h-40 divide-y divide-gray-100 overflow-y-auto" >
116
- < li
117
- v- for = " item in filteredResults"
122
+ < li
123
+ v- for = " item in filteredResults"
118
124
: key= " item.id"
119
125
class = " cursor-pointer px-4 py-2 text-gray-800 transition-colors hover:bg-blue-100 dark:text-white dark:hover:bg-gray-950"
120
126
@click = " selectItem(item)"
121
127
>
122
128
@ {{ item .name }}
123
129
< / li>
124
-
130
+
125
131
< li v- if = " filteredResults.length === 0" class = " px-4 py-2 text-center text-gray-500 dark:text-gray-300" >
126
132
@lang (' admin::app.components.lookup.no-results' )
127
133
< / li>
128
134
< / ul>
129
135
< / div>
130
-
136
+
131
137
<!-- Action Buttons -->
132
138
< div class = " absolute top-1/2 flex -translate-y-1/2 transform gap-0.5 bg-white dark:bg-gray-900 ltr:right-2 rtl:left-2" >
133
139
< button
@@ -137,7 +143,7 @@ class="flex items-center justify-center bg-green-100 p-1 hover:bg-green-200 ltr:
137
143
>
138
144
< i class = " icon-tick text-md cursor-pointer font-bold text-green-600 dark:!text-green-600" / >
139
145
< / button>
140
-
146
+
141
147
< button
142
148
type= " button"
143
149
class = " item-center flex justify-center bg-red-100 p-1 hover:bg-red-200 ltr:rounded-r-md rtl:rounded-l-md"
@@ -197,7 +203,7 @@ class="item-center flex justify-center bg-red-100 p-1 hover:bg-red-200 ltr:round
197
203
type: String ,
198
204
default: ' ' ,
199
205
},
200
-
206
+
201
207
valueLabel: {
202
208
type: String ,
203
209
default: ' ' ,
@@ -210,6 +216,8 @@ class="item-center flex justify-center bg-red-100 p-1 hover:bg-red-200 ltr:round
210
216
211
217
isEditing: false ,
212
218
219
+ isDirty: false ,
220
+
213
221
showPopup: false ,
214
222
215
223
searchTerm: ' ' ,
@@ -233,8 +241,8 @@ class="item-center flex justify-center bg-red-100 p-1 hover:bg-red-200 ltr:round
233
241
watch: {
234
242
/**
235
243
* Watch the value prop.
236
- *
237
- * @param {String} newValue
244
+ *
245
+ * @param {String} newValue
238
246
*/
239
247
value (newValue ) {
240
248
this .inputValue = newValue;
@@ -256,11 +264,11 @@ class="item-center flex justify-center bg-red-100 p-1 hover:bg-red-200 ltr:round
256
264
257
265
/**
258
266
* Filter the searchedResults based on the search query.
259
- *
267
+ *
260
268
* @return {Array}
261
269
*/
262
270
filteredResults () {
263
- return this .searchedResults .filter (item =>
271
+ return this .searchedResults .filter (item =>
264
272
item .name .toLowerCase ().includes (this .searchTerm .toLowerCase ())
265
273
);
266
274
},
@@ -269,7 +277,7 @@ class="item-center flex justify-center bg-red-100 p-1 hover:bg-red-200 ltr:round
269
277
methods: {
270
278
/**
271
279
* Toggle the input.
272
- *
280
+ *
273
281
* @return {void}
274
282
*/
275
283
toggle () {
@@ -296,7 +304,7 @@ class="item-center flex justify-center bg-red-100 p-1 hover:bg-red-200 ltr:round
296
304
297
305
/**
298
306
* Save the input value.
299
- *
307
+ *
300
308
* @return {void}
301
309
*/
302
310
save () {
@@ -310,6 +318,8 @@ class="item-center flex justify-center bg-red-100 p-1 hover:bg-red-200 ltr:round
310
318
return ;
311
319
}
312
320
321
+ this .isDirty = true ;
322
+
313
323
this .inputValue = this .selectedItem .name ;
314
324
315
325
if (this .url ) {
@@ -320,10 +330,12 @@ class="item-center flex justify-center bg-red-100 p-1 hover:bg-red-200 ltr:round
320
330
this .$emitter .emit (' add-flash' , { type: ' success' , message: response .data .message });
321
331
})
322
332
.catch ((error ) => {
333
+ this .isDirty = false ;
334
+
323
335
this .inputValue = this .value ;
324
336
325
337
this .$emitter .emit (' add-flash' , { type: ' error' , message: error .response .data .message });
326
- });
338
+ });
327
339
}
328
340
329
341
this .$emit (' on-change' , {
@@ -334,9 +346,9 @@ class="item-center flex justify-center bg-red-100 p-1 hover:bg-red-200 ltr:round
334
346
335
347
/**
336
348
* Select an item from the list.
337
- *
349
+ *
338
350
* @param {Object} item
339
- *
351
+ *
340
352
* @return {void}
341
353
*/
342
354
selectItem (item ) {
@@ -349,7 +361,7 @@ class="item-center flex justify-center bg-red-100 p-1 hover:bg-red-200 ltr:round
349
361
350
362
/**
351
363
* Cancel the input value.
352
- *
364
+ *
353
365
* @return {void}
354
366
*/
355
367
cancel () {
@@ -364,7 +376,7 @@ class="item-center flex justify-center bg-red-100 p-1 hover:bg-red-200 ltr:round
364
376
365
377
/**
366
378
* Initialize the items.
367
- *
379
+ *
368
380
* @return {void}
369
381
*/
370
382
search () {
@@ -385,11 +397,11 @@ class="item-center flex justify-center bg-red-100 p-1 hover:bg-red-200 ltr:round
385
397
this .cancelToken = this .$axios .CancelToken .source ();
386
398
387
399
this .$axios .get (this .src , {
388
- params: {
400
+ params: {
389
401
... this .params ,
390
402
query: this .searchTerm
391
403
},
392
- cancelToken: this .cancelToken .token ,
404
+ cancelToken: this .cancelToken .token ,
393
405
})
394
406
.then (response => {
395
407
this .searchedResults = response .data ;
@@ -409,7 +421,7 @@ class="item-center flex justify-center bg-red-100 p-1 hover:bg-red-200 ltr:round
409
421
const dropdownContainer = this .$refs .dropdownContainer ;
410
422
411
423
if (! dropdownContainer) {
412
- return ;
424
+ return ;
413
425
}
414
426
415
427
const dropdownRect = dropdownContainer .getBoundingClientRect ();
0 commit comments