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.
 
 
 

242 rivejä
12 KiB

  1. <div class="h-full lg:min-w-full xl:min-w-0" x-data="UI.createTable({db:'{arguments:db}'})">
  2. <div class="border-base-200 flex items-center justify-between px-5 mb-[10px] space-x-3">
  3. <div>
  4. <span class="text-2xl text-[#008EED] leading-[80px] capitalize">{arguments:db}s</span>
  5. </div>
  6. <div class="flex items-center gap-2">
  7. <label class="input input-primary w-[200px]">
  8. <span class="iconify lucide--search text-base-content/70 size-4.5 "></span>
  9. <input class="text-base placeholder:text-sm" type="search" x-model="search" @input="updateSearch"
  10. placeholder="Search" />
  11. </label>
  12. <!-- <div class="dropdown dropdown-bottom dropdown-end">
  13. <div
  14. tabindex="0"
  15. role="button"
  16. class="btn btn-outline btn-primary">
  17. <span
  18. class="iconify lucide--columns-3-cog size-4"></span>
  19. </div>
  20. <div tabindex="0" class="dropdown-content bg-base-100 rounded-box w-44 shadow">
  21. <ul class="menu w-full">
  22. <template
  23. x-for="column in allLeafColumns"
  24. :key="column.id">
  25. <li @click="toggleColumn(column)">
  26. <div
  27. class="group gap-2.5"
  28. :data-visible="isColumnVisible(column) ? true : null">
  29. <span
  30. class="iconify lucide--check size-4 scale-50 opacity-0 transition-all duration-300 group-data-visible:scale-100 group-data-visible:opacity-100"></span>
  31. <span
  32. class="font-medium"
  33. x-text="column.columnDef.header"></span>
  34. </div>
  35. </li>
  36. </template>
  37. </ul>
  38. </div>
  39. </div> -->
  40. <div class="dropdown dropdown-bottom dropdown-end">
  41. <div aria-label="More actions" tabindex="0" role="button" class="btn btn-outline btn-primary">
  42. <span class="iconify lucide--ellipsis-vertical size-4"></span>
  43. </div>
  44. <div tabindex="0" class="dropdown-content bg-base-100 rounded-box w-44 shadow">
  45. <ul class="menu w-full">
  46. <li class="update{arguments:db}" @click="updateData()">
  47. <div>
  48. <span class="iconify lucide--refresh-cw size-4"></span>
  49. Refresh Data
  50. </div>
  51. </li>
  52. <li>
  53. <div>
  54. <span class="iconify lucide--download size-4"></span>
  55. Export
  56. </div>
  57. </li>
  58. </ul>
  59. </div>
  60. </div>
  61. <button type="submit" class="btn btn-outline btn-primary" style="cursor: pointer;"
  62. onclick="js.part({'do':'{arguments:new}',arguments:{db:'{arguments:db}'}})">Add</button>
  63. </div>
  64. </div>
  65. <div class="flex w-full px-[30px]">
  66. <div
  67. class=" max-h-[calc(100vh-260px)] overflow-y-scroll overflow-x-auto w-full border-solid border-1 border-[#008EED] rounded-none">
  68. <div
  69. class="min-w-[480px] px-[20px] py-[20px] border-base-200 flex flex-wrap items-center justify-between gap-2">
  70. <div class="join border-solid border-1 border-[#008EED] rounded-md">
  71. <button class="btn btn-square btn-sm btn-outline border-base-300 join-item"
  72. aria-label="Pagination controls" :disabled="!table.getCanPreviousPage()" @click="prevPage()">
  73. <span class="iconify lucide--arrow-left"></span>
  74. </button>
  75. <input aria-label="Page number" min="1" :max="table.getPageCount()" :value="pageIndex + 1"
  76. @input="setPageIndex($event.target.value - 1)"
  77. class="input input-sm join-item w-10 text-center border-0" />
  78. <button class="btn btn-square btn-sm btn-outline border-base-300 join-item"
  79. aria-label="Pagination controls" :disabled="!table.getCanNextPage()" @click="nextPage()">
  80. <span class="iconify lucide--arrow-right"></span>
  81. </button>
  82. </div>
  83. <p class="text-base-content/70 text-sm max-md:hidden">
  84. <span class="text-base-content font-medium" x-text="`${start}–${end}`"></span>
  85. out of
  86. <span class="text-base-content font-medium" x-text="rowCount"></span>
  87. </p>
  88. <div class="flex items-center gap-2">
  89. <p class="text-base-content/70 text-sm max-md:hidden">
  90. Per page
  91. </p>
  92. <select aria-label="Items per page" class="select select-sm w-16 border-solid border-1 border-[#008EED]"
  93. @change="changePageSize(Number($event.target.value))">
  94. <template x-for="size in pageSizes" :key="size">
  95. <option :value="size" :selected="size === pageSize" x-text="size"></option>
  96. </template>
  97. </select>
  98. </div>
  99. </div>
  100. <table class="table">
  101. <thead>
  102. <template x-for="headerGroup in table.getHeaderGroups()" :key="headerGroup.id">
  103. <tr>
  104. <template x-for="header in headerGroup.headers" :key="header.id">
  105. <th class="text-[#008EED]" , x-show="!header.isPlaceholder"
  106. x-text="flexRender(header.column.columnDef.header, header.getContext())"></th>
  107. </template>
  108. </tr>
  109. </template>
  110. </thead>
  111. <tbody>
  112. <template x-if="!visibleRows.length">
  113. <tr>
  114. <td :colspan="columns.length" class="h-24 text-center">
  115. <p>
  116. No results.
  117. <span @click="clearFilters" class="text-primary cursor-pointer hover:underline">
  118. Clear filters
  119. </span>
  120. </p>
  121. </td>
  122. </tr>
  123. </template>
  124. <template x-if="visibleRows.length">
  125. <template x-for="row in visibleRows" :key="row.id">
  126. <tr>
  127. <template x-for="cell in getVisibleCells(row)" :key="cell.id">
  128. <td>
  129. <template x-if="cell.column.id === 'subject'">
  130. <div class="flex items-center gap-2">
  131. <div>
  132. <p class="leading-none font-medium" x-text="cell.row.original.subject"></p>
  133. <p class="text-base-content/70 mt-0.5 text-xs/none"
  134. x-text="cell.row.original.tracker"></p>
  135. </div>
  136. </div>
  137. </template>
  138. <template x-if="cell.column.id === 'id'">
  139. <span class="text-base-content/70 font-mono text-xs uppercase"
  140. x-text="cell.row.original.id"></span>
  141. </template>
  142. <template x-if="cell.column.id === 'timestamp'">
  143. <p class="space-x-1 whitespace-nowrap">
  144. <span
  145. x-text="new Date(cell.row.original.timestamp).toLocaleDateString('it-IT', {day: 'numeric', month: 'short', year: '2-digit'})"></span>
  146. <span class="text-base-content/60 text-xs"
  147. x-text="new Date(cell.row.original.timestamp).toLocaleTimeString([], {hour: '2-digit', minute: '2-digit', second: '2-digit'})"></span>
  148. </p>
  149. </template>
  150. <template x-if="cell.column.id === 'name'">
  151. <div class="flex items-center gap-2">
  152. <div>
  153. <p class="leading-none font-medium" x-text="cell.row.original.name"></p>
  154. <!-- <p
  155. class="text-base-content/70 mt-0.5 text-xs/none"
  156. x-text="cell.row.original.mac"></p> -->
  157. </div>
  158. </div>
  159. </template>
  160. <template x-if="cell.column.id === 'status'">
  161. <span :class="{
  162. 'badge badge-success badge-sm badge-soft': cell.row.original.status === 'managed',
  163. 'badge badge-info badge-sm badge-soft': cell.row.original.status === 'help',
  164. 'badge badge-error badge-sm badge-soft': cell.row.original.status === 'away',
  165. 'badge badge-ghost badge-sm': ['lost', null, undefined].includes(cell.row.original.status)
  166. }"
  167. x-text="cell.row.original.status.charAt(0).toUpperCase() + cell.row.original.status.slice(1)"></span>
  168. </template>
  169. <template x-if="cell.column.id === 'actions'">
  170. <div class="gap-2 text-right">
  171. <button aria-label="Show" class="saveButton btn btn-outline btn-primary"
  172. @click="viewRow(cell.row)">Open</button>
  173. <!-- <button
  174. aria-label="Show"
  175. class="btn btn-soft btn-xs btn-square"
  176. @click="viewRow(cell.row)">
  177. <span
  178. class="iconify lucide--eye size-3.5"></span>
  179. </button>
  180. <button
  181. aria-label="Delete"
  182. class="btn btn-soft btn-error btn-xs btn-square"
  183. @click="deleteRow(cell.row)">
  184. <span
  185. class="iconify lucide--trash-2 size-3.5"></span>
  186. </button> -->
  187. </div>
  188. </template>
  189. <template x-if="!
  190. ['id', 'timestamp', 'status', 'actions'].includes(cell.column.id)">
  191. <span x-html="cell.column.columnDef.cell
  192. ? cell.column.columnDef.cell(cell.getContext())
  193. : cell.getValue()"></span>
  194. </template>
  195. </td>
  196. </template>
  197. </tr>
  198. </template>
  199. </template>
  200. </tbody>
  201. </table>
  202. </div>
  203. <div
  204. class="post min-w-[400px] max-w-[600px] max-h-[calc(100vh-260px)] overflow-y-scroll border-solid border-1 border-[#008EED] rounded-none post{arguments:id} ml-[30px] mb-[30px] hidden">
  205. </div>
  206. </div>
  207. </div>