Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 

223 строки
11 KiB

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