Skip to content

Commit 95a41d0

Browse files
authored
Merge branch 'main' into copilot/fix-578-2
2 parents 2732dc7 + d1ae43a commit 95a41d0

72 files changed

Lines changed: 5855 additions & 5368 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,15 @@
2222
- `ListViewModel.$orderByToggle()` method added to cycle through ascending, descending, and no ordering for a field.
2323
- Custom methods now support descriptions via `DescriptionAttribute`. These are displayed in the admin pages.
2424
- Added `FileTypeAttribute` to control allowed file types for custom method file parameters.
25+
- Added `ClientCacheDurationSeconds` property to `ExecuteAttribute` to customize client-side cache duration for GET custom methods with `VaryByProperty`.
2526
- `c-admin-display`: Binary values now render as links that will download the value as a file, instead of only showing the length in bytes.
2627
- `c-datetime-picker`: Added prop `showTodayButton`
2728
- `c-input`: Added a `filter` prop for enum inputs to restrict the values available for selection.
2829
- `c-select`: When bound to a `ViewModel` or `ViewModelCollection`, selected items are converted to `ViewModel` instances before being emitted so that event handlers will receive the final object instance, rather than the intermediate plain model instance.
2930
- `c-select`: Now supports binding to a non-many-to-many collection navigation property. Selecting an item will populate the foreign key of the dependent item, and deselecting an item will clear the foreign key. This mechanism is only available when using c-select directly - it is not delegated by c-input.
3031
- `c-select`: The `create` prop now supports a `position` property to control whether the create item appears at the start ('start', default) or end ('end') of the dropdown list.
3132
- `c-select-many-to-many`: The `itemTitle` prop now receives the existing selected middle entity instance, if there is one.
33+
- `c-loader-status`: Added `show-success` prop and flag to display success messages when operations complete successfully.
3234

3335
## Fixes
3436
- Fix error in codegen when using JS reserved keywords or C# contextual keywords as parameter names.

docs/cspell.json

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@
33
"language": "en",
44
"words": [
55
"appsettings",
6+
"ASPNETCORE",
67
"autosave",
78
"autosaving",
89
"Axios",
910
"bootstrap-datetimepicker",
1011
"Coalesce",
1112
"coalesceko",
1213
"coalescevue",
14+
"discoverability",
1315
"dontSerialize",
1416
"dtos",
1517
"EF",
@@ -18,11 +20,12 @@
1820
"instanceof",
1921
"IntelliTect",
2022
"mkdir",
23+
"msword",
2124
"nameof",
22-
"overridable",
23-
"discoverability",
2425
"netcoreapp",
2526
"netstandard",
27+
"officedocument",
28+
"openxmlformats",
2629
"overridable",
2730
"POCOs",
2831
"queryable",
@@ -31,6 +34,8 @@
3134
"readonly",
3235
"snapshotted",
3336
"Stampable",
37+
"swashbuckle",
38+
"Swashbuckle",
3439
"TPCT",
3540
"treeshaken",
3641
"typeof",
@@ -41,9 +46,9 @@
4146
"Vitest",
4247
"Vuetify",
4348
"webp",
44-
"wwwroot",
45-
"Swashbuckle",
46-
"swashbuckle"
49+
"westus",
50+
"wordprocessingml",
51+
"wwwroot"
4752
],
4853
"ignorePaths": [
4954
"node_modules"

docs/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
"gray-matter": "^4.0.3",
1919
"linkcheck-bin": "file:linkcheck-bin-3.0.0-1.fix-issue-56.tgz",
2020
"serve-handler": "^6.1.6",
21-
"vitepress": "2.0.0-alpha.5"
21+
"vitepress": "2.0.0-alpha.5",
22+
"wait-on": "^8.0.4"
2223
}
2324
}

docs/stacks/vue/coalesce-vue-vuetify/components/c-loader-status.md

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,13 @@ Wrap a save/submit button:
4646
</c-loader-status>
4747
```
4848

49+
Show success alerts when operations complete successfully:
50+
``` vue-html
51+
<c-loader-status :loaders="person.$save" show-success>
52+
<button> Save </button>
53+
</c-loader-status>
54+
```
55+
4956
Hides the table before the first load has completed, or if loading the list encountered an error. Don't show the progress bar after we've already loaded the list for the first time (useful for loads that occur without user interaction, e.g. `setInterval`):
5057

5158
``` vue-html
@@ -119,13 +126,14 @@ no-error-content?: boolean;
119126
no-initial-content?: boolean;
120127
no-progress?: boolean;
121128
no-initial-progress?: boolean;
122-
no-secondary-progress?: boolean;" lang="ts" id="flags-props" />
129+
no-secondary-progress?: boolean;
130+
show-success?: boolean;" lang="ts" id="flags-props" />
123131

124132
Component level [flags](#flags) options that control behavior when the simple form of `loaders` (single instance or array) is used, as well as provide baseline defaults that can be overridden by the advanced form of `loaders` (object map) .
125133

126134
## Flags
127135

128-
The available flags are as follows, all of which default to `true`. In the object literal syntax for `loaders`, the `no-` prefix may be omitted to set the flag to `true`.
136+
The available flags are as follows, all of which default to `true` except for `show-success` which defaults to `false`. In the object literal syntax for `loaders`, the `no-` prefix may be omitted to set the flag to `true`.
129137

130138
| <div style="width:160px">Flag</div> | Description |
131139
| - | - |
@@ -135,6 +143,7 @@ The available flags are as follows, all of which default to `true`. In the objec
135143
| `no-progress` | Master toggle for whether the progress indicator is shown in any scenario. |
136144
| `no-initial-progress` | Controls whether the progress indicator is shown when an API Caller is loading for the very first time (i.e. when `caller.wasSuccessful === null`). |
137145
| `no-secondary-progress` | Controls whether the progress indicator is shown when an API Caller is loading any time after its first invocation (i.e. when `caller.wasSuccessful !== null`). |
146+
| `show-success` | Controls whether success alerts are shown when API calls complete successfully (i.e. when `caller.wasSuccessful === true`). |
138147

139148
## Slots
140149

docs/stacks/vue/getting-started.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ If any of the options you chose above require external integrations, you'll need
7575
7676
### AppHost Project
7777
78-
The AppHost project is a [.NET Aspire](https://learn.microsoft.com/en-us/dotnet/aspire/get-started/aspire-overview) dev-time orchestration project. It is recommended you set this as your startup project when developing, although this is not strictly required if your project only has SQL Server as its sole dependency. If you're not familiar with .NET Aspire, you're strongly encouraged to read through its [overview documentation](https://learn.microsoft.com/en-us/dotnet/aspire/get-started/aspire-overview#dev-time-orchestration) and learn about the features of the [Aspire dashboard](https://learn.microsoft.com/en-us/dotnet/aspire/fundamentals/dashboard/explore).
78+
The AppHost project is a [.NET Aspire](https://learn.microsoft.com/en-us/dotnet/aspire/get-started/aspire-overview) dev-time orchestration project. It is recommended you set this as your startup project when developing, although this is not strictly required if your project only has SQL Server as its sole dependency. If you're not familiar with .NET Aspire, you're strongly encouraged to read through its [overview documentation](https://learn.microsoft.com/en-us/dotnet/aspire/get-started/aspire-overview) and learn about the features of the [Aspire dashboard](https://learn.microsoft.com/en-us/dotnet/aspire/fundamentals/dashboard/explore).
7979
8080
### Data Project
8181

docs/topics/audit-logging.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,9 @@ public class AppDbContext : DbContext, IAuditLogDbContext<AuditLog>
117117

118118
### Exclusions & Formatting
119119

120-
Coalesce's audit logging is built on top of [Entity Framework Plus](https://entityframework-plus.net/ef-core-audit) and can be configured using all of its [configuration](https://entityframework-plus.net/ef-core-audit#scenarios), including [includes/excludes](https://entityframework-plus.net/ef-core-audit-exclude-include-entity) and [custom property formatting](https://entityframework-plus.net/ef-core-audit-format-value).
120+
Coalesce's audit logging uses Entity Framework's change tracking capabilities to automatically detect and record changes to your entities. It intercepts the `SaveChanges` operation to capture entity state changes and property modifications before they're committed to the database.
121121

122-
Coalesce will not use EF Plus's `AuditManager.DefaultConfiguration` global singleton instance. You must use Coalesce's configuration extensions which allow for more targeted configuration per context that does not rely on a global static singleton. For example:
122+
You can configure which entities and properties to include or exclude from auditing, as well as customize how property values are formatted in the audit logs. Coalesce's configuration extensions allow for targeted configuration per context without relying on global static singletons. For example:
123123

124124
``` c#
125125
public class AppDbContext : DbContext, IAuditLogDbContext<AuditLog>

docs/topics/security.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -686,7 +686,7 @@ For a more complete explanation of everything you can do with behaviors, see the
686686

687687
Since Coalesce's data access layer is built on top of Entity Framework, you can also use [Entity Framework's Global Query Filters](https://learn.microsoft.com/en-us/ef/core/querying/filters) feature to apply row-level security.
688688

689-
This approach is less flexible than custom Coalesce data sources and has other [drawbacks](https://learn.microsoft.com/en-us/ef/core/querying/filters#accessing-entity-with-query-filter-using-required-navigation) as well, but on the other hand it has more absolute authority, is less susceptible to issues like inadvertently returning data through unfiltered navigation properties, and can sometimes require less work to implement than individual data sources.
689+
This approach is less flexible than custom Coalesce data sources and has other [drawbacks](https://learn.microsoft.com/en-us/ef/core/querying/filters#query-filters-and-required-navigations) as well, but on the other hand it has more absolute authority, is less susceptible to issues like inadvertently returning data through unfiltered navigation properties, and can sometimes require less work to implement than individual data sources.
690690

691691
Global Query Filters are also the only way to implement database-executed [filtered includes](#filtered-includes) of [reference navigation properties](https://learn.microsoft.com/en-us/ef/core/modeling/relationships/glossary), as there is no version of `.Include()` for reference navigation properties that allows a database-executed predicate to be applied. See [this open issue](https://github.com/dotnet/efcore/issues/24422) on EF Core.
692692

docs/topics/working-with-dates.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ services.AddCoalesce(builder => builder
186186

187187
### Client-Side Configuration
188188

189-
You can configure a default timezone for your client application to control how `DateTimeOffset` values are displayed in the UI. By default, this uses the client computer's timezone and does not need to be configured unless you want to override this. See [Time Zones](/modeling/model-types/models.md#time-zones) for more details.
189+
You can configure a default timezone for your client application to control how `DateTimeOffset` values are displayed in the UI. By default, this uses the client computer's timezone and does not need to be configured unless you want to override this. See [Time Zones](/stacks/vue/layers/models.md#time-zones) for more details.
190190

191191
You can override this on a per-component or per-operation basis using the `timeZone` format option described above.
192192

package-lock.json

Lines changed: 98 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)