Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
82 commits
Select commit Hold shift + click to select a range
5a1e021
Add initial JSONs for the entity creation flows
andrewtavis Dec 21, 2025
03302c7
chore: reworked create event with added requested changes which added…
nicki182 Dec 27, 2025
8cabc11
fix: typing
nicki182 Dec 27, 2025
848b816
Merge remote-tracking branch 'origin/main' into entity-creation-flows
nicki182 Dec 27, 2025
3973d47
fix: headers
nicki182 Dec 27, 2025
fb4a6ea
Fix i18n-check errors and update frontend formatting
andrewtavis Dec 27, 2025
4881f30
Merge remote-tracking branch 'origin/entity-creation-flows' into enti…
nicki182 Dec 28, 2025
29c353c
chore: added services create for organizations and group
nicki182 Dec 28, 2025
c56f2ed
fix: tests
nicki182 Dec 29, 2025
3f79ca9
fix: prettier
nicki182 Dec 29, 2025
47ce95e
chore: added tests for machine architecture
nicki182 Dec 30, 2025
06f1493
Merge remote-tracking branch 'origin/main' into entity-creation-flows
nicki182 Dec 30, 2025
09680d0
fix: fix tests, format and added missing liscensing headers
nicki182 Dec 30, 2025
12e024e
fix: removed unnecesary file
nicki182 Dec 30, 2025
2b600e2
fix: added missing header in file
nicki182 Dec 30, 2025
273f1bb
fix: build
nicki182 Dec 30, 2025
781d323
fix: fix json sent to backend
nicki182 Dec 30, 2025
9215c2d
fix: fix prettier issues
nicki182 Dec 30, 2025
e40b843
rename field organizations to orgs
to-sta Dec 30, 2025
7d7ea23
Merge branch 'entity-creation-flows' of https://github.com/activist-o…
to-sta Dec 30, 2025
9e04c61
chore: upped the coverage to 30 since now its 38%
nicki182 Dec 30, 2025
1966c0b
fix: fix date format
nicki182 Dec 30, 2025
9fe94bb
updated serializer
to-sta Dec 30, 2025
e3e9a46
create event update
to-sta Jan 2, 2026
8da3584
simple test and rollback mechanism implemented
to-sta Jan 3, 2026
2b96831
fix: fix placeholder issue with FormSelectorCombobox
nicki182 Jan 4, 2026
c4c22c0
only allow groups that have a relationship the organizations
to-sta Jan 5, 2026
0662261
event time validation added, setting renamed to location_type
to-sta Jan 5, 2026
1069baf
chore: finished scructural testing of state machine
nicki182 Jan 9, 2026
e057f04
fix: adding missing header
nicki182 Jan 9, 2026
6179fc6
Fix Prettier issues
andrewtavis Jan 10, 2026
119a037
Merge branch 'main' into entity-creation-flows
andrewtavis Jan 10, 2026
8f5929c
Fix i18n check errors for fr.json
andrewtavis Jan 10, 2026
c0e0cbf
update create event workflow
to-sta Jan 11, 2026
8673a06
event filter updated
to-sta Jan 11, 2026
79dcc96
fix: show groups of organization, fix groups by change logic based on…
nicki182 Jan 11, 2026
dfeaf95
fix: CardSearchResultEntityEvent now shows card, renders based on new…
nicki182 Jan 11, 2026
163d85a
fix:readjust front end based on new data models
nicki182 Jan 12, 2026
8cdd272
Merge branch 'main' into entity-creation-flows
nicki182 Jan 19, 2026
55a5a1f
added iso and reverted to eventtexts m2m rel.
to-sta Jan 24, 2026
8f3f92f
Merge branch 'main' into entity-creation-flows
andrewtavis Jan 24, 2026
96d8859
fixed groupapi test
to-sta Jan 24, 2026
c8fb735
fix: create flow for event to go towards online event
nicki182 Jan 24, 2026
7a1722d
switched from uuid to the object for topics and times
to-sta Jan 24, 2026
3fe48f0
chore: added adittional eror handling functionality and added meta ta…
nicki182 Jan 26, 2026
a6646d7
chore: remove unnecesary file
nicki182 Jan 27, 2026
f59673e
fix: added error from FieldListItem to bind
nicki182 Jan 27, 2026
f30ff84
minor adjustments
to-sta Feb 7, 2026
54d9a98
minor adjustments
to-sta Feb 7, 2026
1cee1a7
minor adjustments
to-sta Feb 7, 2026
3fa0661
Fix Prettier issues
andrewtavis Feb 8, 2026
b5fc0d1
group and org updates
to-sta Feb 8, 2026
c35ae69
fixed some mypy errors
to-sta Feb 8, 2026
65b31d2
fix: fixes to make create group work
nicki182 Feb 10, 2026
f8744a2
Merge branch 'main' into entity-creation-flows
nicki182 Feb 10, 2026
4085707
fix: tests and typing
nicki182 Feb 10, 2026
a44bc9f
fix: prettier
nicki182 Feb 10, 2026
b2276dd
fix: typing and testing
nicki182 Feb 10, 2026
7102f20
removed obsolete group and organization API test files
to-sta Feb 12, 2026
27bcf8c
removed fields org_name and group_name, adjusted tests
to-sta Feb 12, 2026
e0fab09
fix: fix the issue with refresh when first rendering calendar and add…
nicki182 Feb 13, 2026
a5f7007
fix: vitests
nicki182 Feb 13, 2026
b173f43
chore: added components testing
nicki182 Feb 13, 2026
1ca005c
Merge branch 'main' into entity-creation-flows
andrewtavis Feb 21, 2026
9d83abb
i18n-check fixes
andrewtavis Feb 21, 2026
a2edd1d
Fixes for backend tests and add docs - wip
andrewtavis Feb 21, 2026
b75454d
Remove old fields from backend tests - wip
andrewtavis Feb 21, 2026
b45e680
Update pytest docs
andrewtavis Feb 21, 2026
1d03737
Restart groups of orgs after a new one has been created
andrewtavis Feb 21, 2026
4afd748
Move store declaration inside of function
andrewtavis Feb 21, 2026
7c93ec1
Remove unneeded backend test file
andrewtavis Feb 21, 2026
eec45e9
Send description texts to backend on create + test fix attempt - wip
andrewtavis Feb 21, 2026
5dc6186
Fixes for backend tests
andrewtavis Feb 22, 2026
6220cb0
Merge branch 'main' into entity-creation-flows
andrewtavis Feb 22, 2026
8b61a35
i18n-check fixes
andrewtavis Feb 22, 2026
9e5484f
Fix Ruff issue - wip comment out unused variable
andrewtavis Feb 22, 2026
2d32f83
Fixes for final backend tests - assign topic type from topics.json
andrewtavis Feb 22, 2026
829167a
Add back in validation of start time and end time + minor clean up
andrewtavis Feb 22, 2026
af6243a
Fix test for assigning multiple topics to groups
andrewtavis Feb 22, 2026
38d3f32
Add comment on choice of fixing group topics test
andrewtavis Feb 22, 2026
d800d98
Remove unneeded JSONs and fix the test of multiple org topics
andrewtavis Feb 22, 2026
2fa1243
Final fix to backend Python tests
andrewtavis Feb 22, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions create_event.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"name": "string (required)",
"tagline": "string",
"description": "string (required)",
"organizations": [
"uuid (required)"
],
"groups": [
"uuid"
],
"location_type": "in person | online (required)",
"event_type": "learn | action (required)",
"topics": [
"uuid (required)"
],
"online_location_link": "string",
"location": {
"address_or_name": "string",
"city": "string",
"country_code": "string",
"lat": "string",
"lon": "string",
"bbox": [
"string"
]
},
"times": [
{
"date": "date",
"all_day": "bool (required)",
"start_time": "datetime",
"end_time": "datetime"
}
]
}
10 changes: 10 additions & 0 deletions create_group.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"name": "string (required)",
"tagline": "string",
"description": "string (required)",
"organization": "uuid (required)",
"topics": [
"uuid (required)"
],
"city": "string (required)"
}
10 changes: 10 additions & 0 deletions create_org.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"name": "string (required)",
"tagline": "string",
"description": "string (required)",
"topics": [
"uuid (required)"
],
"country_code": "string (required)",
"city": "string (required)"
}
73 changes: 73 additions & 0 deletions frontend/app/components/form/FormSearchLocation.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
<!-- SPDX-License-Identifier: AGPL-3.0-or-later -->
<template>
<div class="px-4 sm:px-6 md:px-8 xl:px-24 2xl:px-36">
<Form
id="search-location"
@submit="handleSubmit"
class="space-y-4"
:schema="locationSchema"
:submit-label="$t('i18n.components.form.search_location.search_location')"
>
<FormItem
v-slot="{ id, handleChange, errorMessage, value }"
:label="$t('i18n.components.machine.steps._global.country')"
name="country"
>
<!-- prettier-ignore-attribute :modelValue -->
<FormSelectorComboboxCountry
:id="id"
@update:selected-country="handleChange"
:hasError="!!errorMessage.value"
:label="$t('i18n.components.machine.steps._global.country')"
:selected-country="(value.value as string) || ''"
/>
</FormItem>
<FormItem
v-slot="{ id, handleChange, handleBlur, errorMessage, value }"
:label="$t('i18n.components.machine.steps._global.city')"
name="city"
>
<!-- prettier-ignore-attribute :modelValue -->
<FormTextInput
:id="id"
@blur="handleBlur"
@input="handleChange"
:hasError="!!errorMessage.value"
:label="$t('i18n.components.machine.steps._global.city')"
:modelValue="(value.value as string)"
/>
</FormItem>
<FormItem
v-slot="{ id, handleChange, handleBlur, errorMessage, value }"
:label="
$t('i18n.components.machine_steps_create_event_location.street_house_number')
"
name="street"
>
<!-- prettier-ignore-attribute :modelValue -->
<FormTextInput
:id="id"
@blur="handleBlur"
@input="handleChange"
:hasError="!!errorMessage.value"
:label="
$t('i18n.components.machine_steps_create_event_location.street_house_number')
"
:modelValue="(value.value as string)"
/>
</FormItem>
</Form>
</div>
</template>

<script setup lang="ts">
import { z } from "zod";
defineProps<{
handleSubmit: (values: unknown) => Promise<void> | void;
}>();
const locationSchema = z.object({
country: z.string().min(1, "Country is required"),
street: z.string().min(1, "Street and House Number is required"),
city: z.string().min(1, "City is required"),
});
</script>
6 changes: 0 additions & 6 deletions frontend/app/components/form/radio/FormRadio.vue
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,6 @@
class="field"
type="radio"
/>
<label v-if="label" :for="uuid">
{{ label }}
</label>
<BaseErrorMessage :id="`${uuid}-error`" v-if="error">
{{ error }}
</BaseErrorMessage>
</template>

<script setup lang="ts">
Expand Down
33 changes: 23 additions & 10 deletions frontend/app/components/form/radio/FormRadioBtn.vue
Original file line number Diff line number Diff line change
@@ -1,19 +1,21 @@
<!-- SPDX-License-Identifier: AGPL-3.0-or-later -->
<template>
<div
class="relative flex h-9 w-full items-center border border-interactive font-bold first:rounded-l-md last:rounded-r-md"
class="relative flex h-9 w-full items-center border border-interactive font-bold first:rounded-l-md last:rounded-r-md py-7 px-2"
:class="{
'bg-menu-selection text-layer-1': modelValue === value && !customColor,
[customColorClass]: modelValue === value && customColor,
'bg-layer-2 text-distinct-text': modelValue !== value,
'style-menu-option-cta': optionIsChecked(value) && !customColor,
[customColorClass]: optionIsChecked(value) && customColor,
'style-menu-option bg-layer-2': !optionIsChecked(value),
}"
>
<input
:id="uuid"
v-bind="{ ...$attrs, onChange: updateValue }"
:checked="modelValue === value"
v-bind="$attrs"
@change="emit('update:modelValue', value)"
:checked="optionIsChecked(value)"
class="hidden"
type="radio"
:value="value"
/>
<label
v-if="label"
Expand All @@ -30,20 +32,31 @@ import { v4 as uuidv4 } from "uuid";

export interface Props {
label?: string;
value?: string;
modelValue?: string;
value?: unknown;
modelValue?: unknown;
error?: string;
customColor?: string;
compareBy?: string;
}

const optionIsChecked = (optionValue: unknown): boolean => {
if (props.compareBy && props.modelValue && optionValue) {
return (
(props.modelValue as Record<string, unknown>)[props.compareBy] ===
(optionValue as Record<string, unknown>)[props.compareBy]
);
}
return props.modelValue === optionValue;
};

const props = withDefaults(defineProps<Props>(), {
label: "",
error: "",
customColor: "",
compareBy: "id",
});

const emit = defineEmits(["update:modelValue"]);
const { updateValue } = useFormSetup(props, emit);

const uuid = uuidv4();
const customColorClass =
props.customColor !== ""
Expand Down
40 changes: 40 additions & 0 deletions frontend/app/components/form/radio/FormRadioBtns.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<!-- SPDX-License-Identifier: AGPL-3.0-or-later -->
<template>
<div class="flex" :class="{ 'flex-col gap-2': vertical }">
<FormRadioBtn
v-for="option in options"
:key="option.value"
@update:model-value="updateValue"
:custom-color="option.customColor || customColor"
:label="option.label"
:model-value="modelValue"
:value="option.value"
/>
</div>
</template>

<script setup lang="ts">
export interface RadioOption {
value: string;
customColor?: string;
label: string;
}

export interface Props {
label?: string;
options: RadioOption[];
modelValue?: string;
error?: string;
customColor?: string;
vertical?: boolean;
}

withDefaults(defineProps<Props>(), {
vertical: false,
});

const emit = defineEmits(["update:modelValue"]);
const updateValue = (value: unknown) => {
emit("update:modelValue", value);
};
</script>
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,15 @@ const props = withDefaults(defineProps<Props>(), {
hasColOptions: true,
});
const filters = ref<{ name?: string }>({});
const handleFilterValueUpdate = (val: string) => {
filters.value.name = val;

const { debounce } = useDebounce();

const updateFilters = (val: unknown) => {
filters.value.name = val as string;
};

const handleFilterValueUpdate = debounce(updateFilters, 300);

const linked_user_id = computed(() => String(props.linkedUserId) || "");

const {
Expand Down
3 changes: 2 additions & 1 deletion frontend/app/components/machine/Machine.vue
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,10 @@
</template>

<script setup lang="ts">

const props = defineProps<{
machineType: MachineType;
options?: Record<string, unknown>;
options?: UseFlowScreensOptions;
}>();
const emit = defineEmits(["close", "submit"]);

Expand Down
Loading
Loading