@industry-theme/alexandria-panels 0.1.17 → 0.1.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { PanelComponentProps } from '../../types';
|
|
3
|
+
export interface WorkspaceCollectionPanelProps extends PanelComponentProps {
|
|
4
|
+
selectedRepository?: string;
|
|
5
|
+
}
|
|
3
6
|
/**
|
|
4
7
|
* WorkspaceCollectionPanel - Browser-based workspace repository management panel
|
|
5
8
|
*
|
|
9
|
+
* Props:
|
|
10
|
+
* - selectedRepository: Full name of the selected repo (e.g., "owner/repo")
|
|
11
|
+
*
|
|
6
12
|
* Features:
|
|
7
13
|
* - List all repositories in a workspace
|
|
8
|
-
* -
|
|
14
|
+
* - Toggle between name (A-Z) and recently updated sorting
|
|
15
|
+
* - Syncs selection with selectedRepository prop and repository:selected events
|
|
9
16
|
* - Navigate to repository pages
|
|
10
17
|
* - Remove repositories from workspace
|
|
11
18
|
*
|
|
@@ -18,7 +25,7 @@ import type { PanelComponentProps } from '../../types';
|
|
|
18
25
|
* - repository:navigate
|
|
19
26
|
* - repository:removed
|
|
20
27
|
*/
|
|
21
|
-
export declare const WorkspaceCollectionPanel: React.FC<
|
|
28
|
+
export declare const WorkspaceCollectionPanel: React.FC<WorkspaceCollectionPanelProps>;
|
|
22
29
|
/**
|
|
23
30
|
* Preview component for panel tabs/thumbnails
|
|
24
31
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/panels/WorkspaceCollectionPanel/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/panels/WorkspaceCollectionPanel/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AASzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAYvD,MAAM,WAAW,6BAA8B,SAAQ,mBAAmB;IACxE,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AA8uBD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,wBAAwB,EAAE,KAAK,CAAC,EAAE,CAAC,6BAA6B,CAE5E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,+BAA+B,EAAE,KAAK,CAAC,EAsCnD,CAAC;AAGF,YAAY,EACV,SAAS,EACT,wBAAwB,EACxB,0BAA0B,EAC1B,+BAA+B,EAC/B,yBAAyB,EACzB,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,SAAS,CAAC"}
|
package/dist/panels.bundle.js
CHANGED
|
@@ -3020,12 +3020,13 @@ function getLanguageColor$1(language) {
|
|
|
3020
3020
|
const WorkspaceCollectionPanelContent = ({
|
|
3021
3021
|
context,
|
|
3022
3022
|
actions,
|
|
3023
|
-
events
|
|
3023
|
+
events,
|
|
3024
|
+
selectedRepository
|
|
3024
3025
|
}) => {
|
|
3025
3026
|
var _a, _b, _c, _d;
|
|
3026
3027
|
const { theme } = useTheme();
|
|
3027
|
-
const [filter, setFilter] = useState("");
|
|
3028
3028
|
const [selectedRepo, setSelectedRepo] = useState(null);
|
|
3029
|
+
const [sortField, setSortField] = useState("name");
|
|
3029
3030
|
const panelActions = actions;
|
|
3030
3031
|
const workspaceSlice = context.getSlice("workspace");
|
|
3031
3032
|
const repositoriesSlice = context.getSlice("workspaceRepositories");
|
|
@@ -3033,24 +3034,44 @@ const WorkspaceCollectionPanelContent = ({
|
|
|
3033
3034
|
const repositories = ((_b = repositoriesSlice == null ? void 0 : repositoriesSlice.data) == null ? void 0 : _b.repositories) ?? [];
|
|
3034
3035
|
const isLoading = (workspaceSlice == null ? void 0 : workspaceSlice.loading) || (repositoriesSlice == null ? void 0 : repositoriesSlice.loading) || false;
|
|
3035
3036
|
const error = ((_c = workspaceSlice == null ? void 0 : workspaceSlice.data) == null ? void 0 : _c.error) || ((_d = repositoriesSlice == null ? void 0 : repositoriesSlice.data) == null ? void 0 : _d.error);
|
|
3036
|
-
|
|
3037
|
-
|
|
3038
|
-
|
|
3039
|
-
|
|
3040
|
-
|
|
3041
|
-
|
|
3042
|
-
const haystack = [
|
|
3043
|
-
repo.name,
|
|
3044
|
-
repo.full_name,
|
|
3045
|
-
((_a2 = repo.owner) == null ? void 0 : _a2.login) ?? "",
|
|
3046
|
-
repo.description ?? "",
|
|
3047
|
-
repo.language ?? ""
|
|
3048
|
-
].join(" ").toLowerCase();
|
|
3049
|
-
return haystack.includes(normalizedFilter);
|
|
3050
|
-
});
|
|
3037
|
+
useEffect(() => {
|
|
3038
|
+
if (selectedRepository && repositories.length > 0) {
|
|
3039
|
+
const repo = repositories.find((r) => r.full_name === selectedRepository);
|
|
3040
|
+
if (repo) {
|
|
3041
|
+
setSelectedRepo(repo);
|
|
3042
|
+
}
|
|
3051
3043
|
}
|
|
3052
|
-
|
|
3053
|
-
|
|
3044
|
+
}, [selectedRepository, repositories]);
|
|
3045
|
+
useEffect(() => {
|
|
3046
|
+
const unsubscribe = events.on("repository:selected", (event) => {
|
|
3047
|
+
var _a2;
|
|
3048
|
+
const payload = event.payload;
|
|
3049
|
+
if (((_a2 = payload == null ? void 0 : payload.repository) == null ? void 0 : _a2.full_name) && repositories.length > 0) {
|
|
3050
|
+
const repo = repositories.find((r) => {
|
|
3051
|
+
var _a3;
|
|
3052
|
+
return r.full_name === ((_a3 = payload.repository) == null ? void 0 : _a3.full_name);
|
|
3053
|
+
});
|
|
3054
|
+
if (repo) {
|
|
3055
|
+
setSelectedRepo(repo);
|
|
3056
|
+
}
|
|
3057
|
+
}
|
|
3058
|
+
});
|
|
3059
|
+
return () => unsubscribe();
|
|
3060
|
+
}, [events, repositories]);
|
|
3061
|
+
const toggleSort = () => {
|
|
3062
|
+
setSortField(sortField === "name" ? "updated" : "name");
|
|
3063
|
+
};
|
|
3064
|
+
const sortedRepositories = useMemo(() => {
|
|
3065
|
+
return [...repositories].sort((a, b) => {
|
|
3066
|
+
if (sortField === "name") {
|
|
3067
|
+
return a.name.localeCompare(b.name);
|
|
3068
|
+
} else {
|
|
3069
|
+
const aTime = new Date(a.pushed_at || a.updated_at || 0).getTime();
|
|
3070
|
+
const bTime = new Date(b.pushed_at || b.updated_at || 0).getTime();
|
|
3071
|
+
return bTime - aTime;
|
|
3072
|
+
}
|
|
3073
|
+
});
|
|
3074
|
+
}, [repositories, sortField]);
|
|
3054
3075
|
const handleSelectRepository = useCallback(
|
|
3055
3076
|
(repository) => {
|
|
3056
3077
|
setSelectedRepo(repository);
|
|
@@ -3138,10 +3159,6 @@ const WorkspaceCollectionPanelContent = ({
|
|
|
3138
3159
|
void handleRemoveRepository(repository);
|
|
3139
3160
|
}
|
|
3140
3161
|
}
|
|
3141
|
-
}),
|
|
3142
|
-
events.on(`${PANEL_ID$a}:filter`, (event) => {
|
|
3143
|
-
var _a2;
|
|
3144
|
-
setFilter(((_a2 = event.payload) == null ? void 0 : _a2.filter) || "");
|
|
3145
3162
|
})
|
|
3146
3163
|
];
|
|
3147
3164
|
return () => unsubscribers.forEach((unsub) => unsub());
|
|
@@ -3153,9 +3170,7 @@ const WorkspaceCollectionPanelContent = ({
|
|
|
3153
3170
|
backgroundColor: theme.colors.backgroundSecondary
|
|
3154
3171
|
};
|
|
3155
3172
|
const contentContainerStyle = {
|
|
3156
|
-
...baseContainerStyle
|
|
3157
|
-
padding: "16px",
|
|
3158
|
-
gap: "12px"
|
|
3173
|
+
...baseContainerStyle
|
|
3159
3174
|
};
|
|
3160
3175
|
if (!workspace) {
|
|
3161
3176
|
return /* @__PURE__ */ jsx("div", { style: baseContainerStyle, children: /* @__PURE__ */ jsx(
|
|
@@ -3273,42 +3288,71 @@ const WorkspaceCollectionPanelContent = ({
|
|
|
3273
3288
|
) });
|
|
3274
3289
|
}
|
|
3275
3290
|
return /* @__PURE__ */ jsxs("div", { style: contentContainerStyle, children: [
|
|
3276
|
-
|
|
3277
|
-
|
|
3278
|
-
|
|
3279
|
-
{
|
|
3280
|
-
|
|
3281
|
-
|
|
3282
|
-
|
|
3283
|
-
|
|
3284
|
-
|
|
3285
|
-
|
|
3286
|
-
|
|
3287
|
-
|
|
3288
|
-
|
|
3289
|
-
|
|
3290
|
-
|
|
3291
|
-
|
|
3292
|
-
|
|
3293
|
-
|
|
3294
|
-
|
|
3295
|
-
|
|
3296
|
-
|
|
3297
|
-
|
|
3298
|
-
|
|
3299
|
-
|
|
3300
|
-
|
|
3301
|
-
|
|
3302
|
-
|
|
3303
|
-
|
|
3304
|
-
|
|
3305
|
-
|
|
3306
|
-
|
|
3307
|
-
|
|
3308
|
-
|
|
3309
|
-
|
|
3310
|
-
|
|
3311
|
-
|
|
3291
|
+
/* @__PURE__ */ jsxs(
|
|
3292
|
+
"div",
|
|
3293
|
+
{
|
|
3294
|
+
style: {
|
|
3295
|
+
height: "40px",
|
|
3296
|
+
minHeight: "40px",
|
|
3297
|
+
padding: "0 16px",
|
|
3298
|
+
borderBottom: `1px solid ${theme.colors.border}`,
|
|
3299
|
+
display: "flex",
|
|
3300
|
+
alignItems: "center",
|
|
3301
|
+
gap: "8px"
|
|
3302
|
+
},
|
|
3303
|
+
children: [
|
|
3304
|
+
/* @__PURE__ */ jsx(Folder, { size: 18, color: theme.colors.primary }),
|
|
3305
|
+
/* @__PURE__ */ jsx(
|
|
3306
|
+
"span",
|
|
3307
|
+
{
|
|
3308
|
+
style: {
|
|
3309
|
+
fontSize: `${theme.fontSizes[2]}px`,
|
|
3310
|
+
fontWeight: theme.fontWeights.medium,
|
|
3311
|
+
color: theme.colors.text,
|
|
3312
|
+
fontFamily: theme.fonts.body
|
|
3313
|
+
},
|
|
3314
|
+
children: "Repositories"
|
|
3315
|
+
}
|
|
3316
|
+
),
|
|
3317
|
+
repositories.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
3318
|
+
/* @__PURE__ */ jsx(
|
|
3319
|
+
"span",
|
|
3320
|
+
{
|
|
3321
|
+
style: {
|
|
3322
|
+
fontSize: `${theme.fontSizes[1]}px`,
|
|
3323
|
+
color: theme.colors.textSecondary,
|
|
3324
|
+
padding: "2px 8px",
|
|
3325
|
+
borderRadius: "12px",
|
|
3326
|
+
backgroundColor: theme.colors.background
|
|
3327
|
+
},
|
|
3328
|
+
children: repositories.length
|
|
3329
|
+
}
|
|
3330
|
+
),
|
|
3331
|
+
/* @__PURE__ */ jsx(
|
|
3332
|
+
"button",
|
|
3333
|
+
{
|
|
3334
|
+
onClick: toggleSort,
|
|
3335
|
+
style: {
|
|
3336
|
+
marginLeft: "auto",
|
|
3337
|
+
padding: "4px 10px",
|
|
3338
|
+
borderRadius: "4px",
|
|
3339
|
+
border: `1px solid ${theme.colors.border}`,
|
|
3340
|
+
background: theme.colors.background,
|
|
3341
|
+
color: theme.colors.text,
|
|
3342
|
+
fontSize: `${theme.fontSizes[1]}px`,
|
|
3343
|
+
fontFamily: theme.fonts.body,
|
|
3344
|
+
cursor: "pointer",
|
|
3345
|
+
display: "flex",
|
|
3346
|
+
alignItems: "center",
|
|
3347
|
+
gap: "4px"
|
|
3348
|
+
},
|
|
3349
|
+
children: sortField === "name" ? "A-Z" : "Recent"
|
|
3350
|
+
}
|
|
3351
|
+
)
|
|
3352
|
+
] })
|
|
3353
|
+
]
|
|
3354
|
+
}
|
|
3355
|
+
),
|
|
3312
3356
|
error && /* @__PURE__ */ jsx(
|
|
3313
3357
|
"div",
|
|
3314
3358
|
{
|
|
@@ -3317,6 +3361,7 @@ const WorkspaceCollectionPanelContent = ({
|
|
|
3317
3361
|
alignItems: "center",
|
|
3318
3362
|
gap: "8px",
|
|
3319
3363
|
padding: "10px 14px",
|
|
3364
|
+
margin: "8px 16px",
|
|
3320
3365
|
borderRadius: "6px",
|
|
3321
3366
|
backgroundColor: `${theme.colors.error || "#ef4444"}20`,
|
|
3322
3367
|
color: theme.colors.error || "#ef4444",
|
|
@@ -3326,28 +3371,6 @@ const WorkspaceCollectionPanelContent = ({
|
|
|
3326
3371
|
children: /* @__PURE__ */ jsx("span", { children: error })
|
|
3327
3372
|
}
|
|
3328
3373
|
),
|
|
3329
|
-
/* @__PURE__ */ jsxs(
|
|
3330
|
-
"div",
|
|
3331
|
-
{
|
|
3332
|
-
style: {
|
|
3333
|
-
fontSize: `${theme.fontSizes[0]}px`,
|
|
3334
|
-
fontFamily: theme.fonts.body,
|
|
3335
|
-
color: theme.colors.textSecondary,
|
|
3336
|
-
textTransform: "uppercase",
|
|
3337
|
-
letterSpacing: "0.5px"
|
|
3338
|
-
},
|
|
3339
|
-
children: [
|
|
3340
|
-
filteredRepositories.length,
|
|
3341
|
-
" ",
|
|
3342
|
-
filteredRepositories.length === 1 ? "repository" : "repositories",
|
|
3343
|
-
filter && repositories.length !== filteredRepositories.length && /* @__PURE__ */ jsxs("span", { children: [
|
|
3344
|
-
" (filtered from ",
|
|
3345
|
-
repositories.length,
|
|
3346
|
-
")"
|
|
3347
|
-
] })
|
|
3348
|
-
]
|
|
3349
|
-
}
|
|
3350
|
-
),
|
|
3351
3374
|
/* @__PURE__ */ jsxs(
|
|
3352
3375
|
"div",
|
|
3353
3376
|
{
|
|
@@ -3356,7 +3379,8 @@ const WorkspaceCollectionPanelContent = ({
|
|
|
3356
3379
|
overflowY: "auto",
|
|
3357
3380
|
display: "flex",
|
|
3358
3381
|
flexDirection: "column",
|
|
3359
|
-
gap: "4px"
|
|
3382
|
+
gap: "4px",
|
|
3383
|
+
padding: "8px"
|
|
3360
3384
|
},
|
|
3361
3385
|
children: [
|
|
3362
3386
|
repositories.length === 0 && !isLoading && /* @__PURE__ */ jsxs(
|
|
@@ -3389,18 +3413,7 @@ const WorkspaceCollectionPanelContent = ({
|
|
|
3389
3413
|
]
|
|
3390
3414
|
}
|
|
3391
3415
|
),
|
|
3392
|
-
|
|
3393
|
-
"div",
|
|
3394
|
-
{
|
|
3395
|
-
style: {
|
|
3396
|
-
padding: "32px",
|
|
3397
|
-
textAlign: "center",
|
|
3398
|
-
color: theme.colors.textSecondary
|
|
3399
|
-
},
|
|
3400
|
-
children: /* @__PURE__ */ jsx("p", { style: { margin: 0 }, children: "No repositories match your filter." })
|
|
3401
|
-
}
|
|
3402
|
-
),
|
|
3403
|
-
filteredRepositories.map((repository) => /* @__PURE__ */ jsx(
|
|
3416
|
+
sortedRepositories.map((repository) => /* @__PURE__ */ jsx(
|
|
3404
3417
|
WorkspaceCollectionRepositoryCard,
|
|
3405
3418
|
{
|
|
3406
3419
|
repository,
|