Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit f46836f

Browse files
committed
Can have multi-versioned git packages in list
1 parent 8984da0 commit f46836f

File tree

2 files changed

+102
-27
lines changed

2 files changed

+102
-27
lines changed

‎src/views/new-project/package-view.tsx‎

Lines changed: 101 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ export default function PackageView() {
5656
};
5757

5858
load();
59-
}, [packageInfo.gitPackages,packageInfo.localPackages]);
59+
}, []);
6060

6161
const validPackages = useMemo(() => {
6262
const packages: CategoryPackage[] = (corePackages.value.value ?? [])
@@ -149,23 +149,24 @@ export default function PackageView() {
149149
load();
150150
}, []);
151151

152-
function selectPackage(name: string, version?: string) {
152+
function selectPackage(package_: CategoryPackage, version?: string) {
153153
const packages = packageInfo.selectedPackages;
154-
const filtered = packages.filter((y) => y.name !== name);
155-
156154
newProjectContext.dispatch({
157155
type: "set_selected_packages",
158-
packages: [...filtered, { name, version }],
156+
packages: [
157+
...packages,
158+
{ name: package_.package_.name, version: version },
159+
],
159160
});
160161
}
161162

162-
function removePackage(name: string, version: string) {
163+
function removePackage(package_: CategoryPackage, version: string) {
163164
const packages = packageInfo.selectedPackages;
164-
const filtered = packages.filter((y) => y.name !== name);
165-
166165
newProjectContext.dispatch({
167166
type: "set_selected_packages",
168-
packages: filtered,
167+
packages: packages.filter(
168+
(x) => !(x.name === package_.package_.name && x.version === version)
169+
),
169170
});
170171
}
171172

@@ -197,12 +198,11 @@ export default function PackageView() {
197198
});
198199
}
199200

200-
function togglePackage(name: string, version: string) {
201-
const selected = packageInfo.selectedPackages;
202-
if (selected.find((x) => x.name === name)) {
203-
removePackage(name, version);
201+
function togglePackage(package_: CategoryPackage, version: string) {
202+
if (isSelected(package_, version)) {
203+
removePackage(package_, version);
204204
} else {
205-
selectPackage(name, version);
205+
selectPackage(package_, version);
206206
}
207207
}
208208

@@ -232,6 +232,48 @@ export default function PackageView() {
232232
}
233233
}
234234

235+
function getValidPackageMatches(package_: CategoryPackage) {
236+
const matches = queriedPackages.filter(
237+
(x) => x.package_.name === package_.package_.name
238+
);
239+
240+
return matches;
241+
}
242+
243+
function getValidSelectedPackageMatches(package_: CategoryPackage) {
244+
const matches = getValidPackageMatches(package_).filter((x) =>
245+
newProjectContext.state.packageInfo.selectedPackages.some(
246+
(y) => y.name === x.package_.name
247+
)
248+
);
249+
250+
return matches;
251+
}
252+
253+
const isSelected = (package_: CategoryPackage, version?: string) => {
254+
const matches = getValidSelectedPackageMatches(package_);
255+
version = version || package_.package_.version;
256+
257+
if (matches.length === 0) return false;
258+
if (matches.length === 1) {
259+
return true;
260+
}
261+
262+
const selected = newProjectContext.state.packageInfo.selectedPackages;
263+
for (const x of matches) {
264+
if (
265+
x.package_.version === version &&
266+
selected.some(
267+
(y) => y.name === x.package_.name && y.version === x.package_.version
268+
)
269+
) {
270+
return true;
271+
}
272+
}
273+
274+
return false;
275+
};
276+
235277
return (
236278
<div className="flex h-full">
237279
<Sidebar
@@ -291,22 +333,19 @@ export default function PackageView() {
291333
const existingPackage = packageInfo.templatePackages.find(
292334
(y) => y.name === x.package_.name
293335
);
294-
const isSelected = packageInfo.selectedPackages.some(
295-
(y) => y.name === x.package_.name
296-
);
297-
336+
const selected = isSelected(x);
298337
return (
299338
<Package
300339
key={i}
301340
package_={x}
302341
onClick={() =>
303342
togglePackage(
304-
x.package_.name,
343+
x,
305344
existingPackage?.version ?? x.package_.version
306345
)
307346
}
308347
destroyPackage={destroyPackage}
309-
selected={isSelected}
348+
selected={selected}
310349
otherVersion={existingPackage?.version}
311350
/>
312351
);
@@ -319,7 +358,7 @@ export default function PackageView() {
319358
}
320359

321360
function GitAdd(props: {
322-
selectPackage: (name: string, version?: string) => void;
361+
selectPackage: (package_: CategoryPackage, version?: string) => void;
323362
}) {
324363
const newProjectContext = useContext(NewProjectContext.Context);
325364
const gitPackageJson = useBetterState("");
@@ -360,7 +399,20 @@ function GitAdd(props: {
360399
gitPackageId.set("");
361400
gitPackageUrl.set("");
362401

363-
props.selectPackage(gitPackageId.value, gitPackageUrl.value);
402+
props.selectPackage(
403+
{
404+
package_: {
405+
name: gitPackageId.value,
406+
version: gitPackageUrl.value,
407+
type: TauriTypes.PackageType.Git,
408+
isFile: false,
409+
isDiscoverable: true,
410+
},
411+
category: "Git",
412+
inPackage: false,
413+
},
414+
gitPackageUrl.value
415+
);
364416
} else {
365417
if (gitPackageJson.value === "") return;
366418

@@ -381,13 +433,15 @@ function GitAdd(props: {
381433
return;
382434
}
383435

384-
awaitTauriRouter.add_git_package_to_cache({
436+
constpackage_={
385437
name,
386438
version,
387439
isFile: false,
388440
isDiscoverable: true,
389441
type: TauriTypes.PackageType.Git,
390-
});
442+
};
443+
444+
await TauriRouter.add_git_package_to_cache(package_);
391445

392446
newProjectContext.dispatch({
393447
type: "add_git_package",
@@ -397,7 +451,14 @@ function GitAdd(props: {
397451
},
398452
});
399453

400-
props.selectPackage(name, version);
454+
props.selectPackage(
455+
{
456+
package_,
457+
category: "Git",
458+
inPackage: false,
459+
},
460+
version
461+
);
401462

402463
gitPackageJson.set("");
403464
} catch (e) {
@@ -490,7 +551,7 @@ function GitAdd(props: {
490551
}
491552

492553
function LocalAdd(props: {
493-
selectPackage: (name: string, version?: string) => void;
554+
selectPackage: (package_: CategoryPackage, version?: string) => void;
494555
}) {
495556
const newProjectContext = useContext(NewProjectContext.Context);
496557
const localPackage = useBetterState("");
@@ -522,7 +583,20 @@ function LocalAdd(props: {
522583
},
523584
});
524585

525-
props.selectPackage(localPackage.value, undefined);
586+
props.selectPackage(
587+
{
588+
package_: {
589+
name: localPackage.value,
590+
version: "",
591+
type: TauriTypes.PackageType.Local,
592+
isFile: false,
593+
isDiscoverable: true,
594+
},
595+
category: "Local",
596+
inPackage: false,
597+
},
598+
undefined
599+
);
526600

527601
localPackage.set("");
528602
}

‎src/views/new-project/template-view.tsx‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,7 @@ export default function TemplateView() {
294294
initialTemplateInfo.selectedTemplate?.name ===
295295
x._template.name
296296
}
297+
// selected={isSelected}
297298
/>
298299
))}
299300
</div>

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /