summaryrefslogtreecommitdiffstats
path: root/drivers/ide/Makefile
AgeCommit message (Expand)Author
2009-03-31ide: merge ide_arm and ide_generic host driversBartlomiej Zolnierkiewicz
2009-03-24ide: move error handling code to ide-eh.c (v2)Bartlomiej Zolnierkiewicz
2009-03-24ide: move standard I/O code to ide-io-std.cBartlomiej Zolnierkiewicz
2009-03-24ide: move xfer mode tuning code to ide-xfer-mode.cBartlomiej Zolnierkiewicz
2009-03-24ide: move device settings code to ide-devsets.cBartlomiej Zolnierkiewicz
2009-03-05ide: add at91_ide driverStanislaw Gruszka
2009-02-02ide: add CS5536 host driver (v3)Bartlomiej Zolnierkiewicz
2009-01-06Resurrect IT8172 IDE controller driverShane McDonald
2009-01-02ide: move sysfs support to ide-sysfs.cBartlomiej Zolnierkiewicz
2008-12-29ide: move legacy ISA/VLB ports handling to ide-legacy.c (v2)Bartlomiej Zolnierkiewicz
2008-12-29ide: move Power Management support to ide-pm.cBartlomiej Zolnierkiewicz
2008-10-23ide: drivers/ide/generic.c -> drivers/ide/ide-pci-generic.cBartlomiej Zolnierkiewicz
2008-10-23ide: Add tx4938ide driver (v2)Atsushi Nemoto
2008-10-23ide: Add tx4939ide driver (v6)Atsushi Nemoto
2008-10-21ide: remove useless subdirs from drivers/ide/Bartlomiej Zolnierkiewicz
2008-10-17ide: add generic ATA/ATAPI disk driverBartlomiej Zolnierkiewicz
2008-10-17ide-floppy: factor out generic disk handling code to ide-gd-floppy.cBartlomiej Zolnierkiewicz
2008-10-17ide-disk: factor out generic disk handling code to ide-gd.cBartlomiej Zolnierkiewicz
2008-10-13ide: Implement disk shock protection support (v4)Elias Oltmanns
2008-10-13ide: move SFF DMA code to ide-dma-sff.cBartlomiej Zolnierkiewicz
2008-10-13ide-disk: move /proc handling to ide-disk_proc.c (take 3)Bartlomiej Zolnierkiewicz
2008-10-13ide-disk: move all ioctl handling to ide-disk_ioctl.cBartlomiej Zolnierkiewicz
2008-10-13ide-floppy: move /proc handling to ide-floppy_proc.c (take 2)Bartlomiej Zolnierkiewicz
2008-10-13ide: remove CONFIG_BLK_DEV_IDE config option (take 2)Bartlomiej Zolnierkiewicz
2008-10-10ide-floppy: move floppy ioctls handling to ide-floppy_ioctl.cBartlomiej Zolnierkiewicz
2008-10-10ide: move ioctls handling to ide-ioctls.cBartlomiej Zolnierkiewicz
2008-07-24ide: remove stale comments from drivers/ide/MakefileBartlomiej Zolnierkiewicz
2008-07-16move ide/legacy/hd.c to drivers/block/Adrian Bunk
2008-07-16ide/legacy/hd.c: use late_initcall()Adrian Bunk
2008-07-16ide: move PIO blacklist to ide-pio-blacklist.cBartlomiej Zolnierkiewicz
2008-07-16ide: convert ide-timing.h to ide-timings.c library (take 2)Bartlomiej Zolnierkiewicz
2008-07-15ide: add ide_transfer_pc() helperBartlomiej Zolnierkiewicz
2008-04-28remove the broken ETRAX_IDE driverAdrian Bunk
2008-04-18ide: fix ide_find_port()Bartlomiej Zolnierkiewicz
2008-02-01ide-cd: move code handling cdrom.c IOCTLs to ide-cd_ioctl.cBartlomiej Zolnierkiewicz
2008-02-01ide-cd: move VERBOSE_IDE_CD_ERRORS code to ide-cd_verbose.cBartlomiej Zolnierkiewicz
2008-01-26ide: make remaining built-in only IDE host drivers modular (take 2)Bartlomiej Zolnierkiewicz
2007-11-27ide: add CONFIG_IDE_H8300 config optionBartlomiej Zolnierkiewicz
2007-05-10ide: make /proc/ide/ optionalBartlomiej Zolnierkiewicz
2007-03-17scc_pata: dependency fixKou Ishizaki
2007-02-17drivers/ide: PATA driver for CellebKou Ishizaki
2007-02-07ACPI support for IDE devicesHannes Reinecke
2005-11-17[IDE] Add driver for Sibyte Swarm evaluation boardRalf Baechle
2005-07-03[PATCH] drivers/ide/Makefile: kill dead CONFIG_BLK_DEV_IDE_TCQ entryAdrian Bunk
2005-04-16Linux-2.6.12-rc2Linus Torvalds
s/tables?h=v3.0.0&id=93f9c72a4f49cf83ac2734598793f5c9f6262da4'>tables/src/components/Table/ColumnHeader.tsx
blob: 51de21751d486b7370b14ec0116bc892b88aa03e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
import { flexRender } from "@tanstack/react-table";
import clsx from "clsx";
import { FC } from "react";
import { useDrag, useDrop } from "react-dnd";
import * as ContextMenuPrimitive from "@radix-ui/react-context-menu";
function Filter({
  column,
  table,
  numberOfColumns,
}: {
  column: any;
  table: any;
  numberOfColumns: number;
}) {
  const values = table
    .getPreFilteredRowModel()
    .flatRows.map((row) => row.getValue(column.id));

  const areAllValuesString = values.every(
    (value) => typeof value === "string" || value === null
  );
  const areAllValuesNumber = values.every(
    (value) => typeof value === "number" || value === null
  );

  const valuesContainStringWithSpaces = values.some(
    (value) => typeof value === "string" && value.includes(" ")
  );

  const columnFilterValue = column.getFilterValue();

  const isProbablyDate =
    column.id.toLowerCase().includes("date") ||
    (column.id.toLowerCase() === "index" && !valuesContainStringWithSpaces);

  if (isProbablyDate) {
    function getTime(value) {
      if (!value) return null;
      const date = new Date(value);
      const year = date.getFullYear();
      const month =
        date.getMonth() + 1 > 9
          ? date.getMonth() + 1
          : `0${date.getMonth() + 1}`;
      const day = date.getDate() > 9 ? date.getDate() : `0${date.getDate()}`;
      return `${year}-${month}-${day}`;
    }

    return (
      <div className="flex gap-2 h-10">
        <input
          type="datetime-local"
          value={getTime((columnFilterValue as [string, string])?.[0]) ?? ""}
          onChange={(e) => {
            const value = new Date(e.target.value).getTime();
            column.setFilterValue((old: [string, string]) => [value, old?.[1]]);
          }}
          placeholder={`Start date`}
          className="_input"
        />
        <input
          type="datetime-local"
          value={getTime((columnFilterValue as [string, string])?.[1]) ?? ""}
          onChange={(e) => {
            const value = new Date(e.target.value).getTime();
            column.setFilterValue((old: [string, string]) => [old?.[0], value]);
          }}
          placeholder={`End date`}
          className="_input"
        />
      </div>
    );
  }

  if (areAllValuesNumber) {
    return (
      <div className="flex gap-0.5 h-10">
        <input
          type="number"
          value={(columnFilterValue as [number, number])?.[0] ?? ""}
          onChange={(e) =>
            column.setFilterValue((old: [number, number]) => [
              e.target.value,
              old?.[1],
            ])
          }
          placeholder={`Min`}
          className="_input p-0.5"
        />
        <input
          type="number"
          value={(columnFilterValue as [number, number])?.[1] ?? ""}
          onChange={(e) =>
            column.setFilterValue((old: [number, number]) => [
              old?.[0],
              e.target.value,
            ])
          }
          placeholder={`Max`}
          className="_input p-0.5"
        />
      </div>
    );
  }
  if (areAllValuesString) {
    return (
      <div className="h-10">
        <input
          type="text"
          value={(columnFilterValue ?? "") as string}
          onChange={(e) => column.setFilterValue(e.target.value)}
          placeholder={`Search...`}
          className="_input"
        />
      </div>
    );
  }
  return <div className="h-10"></div>;
}

const reorderColumn = (
  draggedColumnId: string,
  targetColumnId: string,
  columnOrder: string[]
) => {
  columnOrder.splice(
    columnOrder.indexOf(targetColumnId),
    0,
    columnOrder.splice(columnOrder.indexOf(draggedColumnId), 1)[0] as string
  );
  return [...columnOrder];
};

const DraggableColumnHeader: FC<{
  header: any;
  table: any;
  advanced: boolean;
  idx: number;
  lockFirstColumn: boolean;
  setLockFirstColumn: (value: boolean) => void;
}> = ({
  header,
  table,
  advanced,
  idx,
  lockFirstColumn,
  setLockFirstColumn,
}) => {
  const { getState, setColumnOrder } = table;
  const { columnOrder } = getState();
  const { column } = header;

  const [, dropRef] = useDrop({
    accept: "column",
    drop: (draggedColumn: any) => {
      const newColumnOrder = reorderColumn(
        draggedColumn.id,
        column.id,
        columnOrder
      );
      setColumnOrder(newColumnOrder);
    },
  });

  const [{ isDragging }, dragRef, previewRef] = useDrag({
    collect: (monitor) => ({
      isDragging: monitor.isDragging(),
    }),
    item: () => column,
    type: "column",
  });

  const renderField = () => (
    <div ref={previewRef} className="flex gap-1 flex-col">
      {header.isPlaceholder ? null : (
        <>
          <div className="font-bold uppercase text-grey-700 dark:text-white tracking-widest flex gap-2 whitespace-nowrap justify-between">
            <div
              onClick={header.column.getToggleSortingHandler()}
              className={clsx("flex gap-1", {
                "cursor-pointer select-none": header.column.getCanSort(),
              })}
            >
              {flexRender(header.column.columnDef.header, header.getContext())}
              {header.column.getCanSort() && (
                <div className="flex flex-col gap-0.5 items-center justify-center">
                  <button
                    className={clsx({
                      "text-[#669DCB]": header.column.getIsSorted() === "asc",
                      "text-grey-600": header.column.getIsSorted() !== "asc",
                    })}
                  >
                    <svg
                      xmlns="http://www.w3.org/2000/svg"
                      width="8"
                      height="4"
                      fill="none"
                      viewBox="0 0 11 5"
                    >
                      <path fill="currentColor" d="M10.333 5l-5-5-5 5"></path>
                    </svg>
                  </button>
                  <button
                    className={clsx({
                      "text-[#669DCB]": header.column.getIsSorted() === "desc",
                      "text-grey-600": header.column.getIsSorted() !== "desc",
                    })}
                  >
                    <svg
                      xmlns="http://www.w3.org/2000/svg"
                      width="8"
                      height="4"
                      fill="none"
                      viewBox="0 0 11 5"
                    >
                      <path fill="currentColor" d="M.333 0l5 5 5-5"></path>
                    </svg>
                  </button>
                </div>
              )}
            </div>
            {advanced && column.id !== "select" && (
              <button
                ref={dragRef}
                className="text-grey-600 hover:text-grey-800 dark:hover:text-white"
              >
                <svg
                  xmlns="http://www.w3.org/2000/svg"
                  width="17"
                  height="16"
                  fill="none"
                  viewBox="0 0 17 16"
                >
                  <path
                    stroke="currentColor"
                    strokeLinecap="round"
                    strokeLinejoin="round"
                    d="M3.667 6l-2 2 2 2M6.333 3.333l2-2 2 2M10.333 12.667l-2 2-2-2M13 6l2 2-2 2M1.667 8H15M8.333 1.333v13.334"
                  ></path>
                </svg>
              </button>
            )}
          </div>
          {advanced && header.column.getCanFilter() ? (
            <div>
              <Filter
                column={header.column}
                table={table}
                numberOfColumns={columnOrder.length}
              />
            </div>
          ) : null}
        </>
      )}
    </div>
  );

  return (
    <th
      className={clsx("h-[70px] p-4 sticky", {
        "left-0 z-50 bg-white dark:bg-grey-900": idx === 0 && lockFirstColumn,
      })}
      colSpan={header.colSpan}
      style={{ width: header.getSize(), opacity: isDragging ? 0.5 : 1 }}
      ref={dropRef}
    >
      {idx === 0 ? (
        <ContextMenuPrimitive.Root>
          <ContextMenuPrimitive.Trigger asChild>
            {renderField()}
          </ContextMenuPrimitive.Trigger>
          <ContextMenuPrimitive.Portal>
            <ContextMenuPrimitive.Content className="bg-white text-black dark:text-white dark:bg-grey-900 border border-grey-200 dark:border-grey-800 rounded-md shadow-lg p-2 z-50 text-xs">
              <div className="flex flex-col gap-2">
                <button
                  onClick={() => {
                    setLockFirstColumn(!lockFirstColumn);
                  }}
                  className="hover:bg-grey-300 dark:hover:bg-grey-800 rounded-md p-2"
                >
                  {lockFirstColumn ? "Unlock" : "Lock"} first column
                </button>
              </div>
            </ContextMenuPrimitive.Content>
          </ContextMenuPrimitive.Portal>
        </ContextMenuPrimitive.Root>
      ) : (
        renderField()
      )}
      <button
        className="resizer bg-grey-300/20 dark:hover:bg-white absolute top-0 right-0 w-0.5 h-full"
        onMouseDown={header.getResizeHandler()}
        onTouchStart={header.getResizeHandler()}
      ></button>
    </th>
  );
};

export default DraggableColumnHeader;