mirror of
https://github.com/DioxusLabs/dioxus
synced 2025-02-17 06:08:26 +00:00
simplify the crm example a bit more
This commit is contained in:
parent
fc6912d4c0
commit
f2e48f10e9
4 changed files with 9 additions and 40 deletions
|
@ -51,7 +51,7 @@ fn ClientList() -> Element {
|
||||||
h2 { "List of Clients" }
|
h2 { "List of Clients" }
|
||||||
Link { to: Route::ClientAdd, class: "pure-button pure-button-primary", "Add Client" }
|
Link { to: Route::ClientAdd, class: "pure-button pure-button-primary", "Add Client" }
|
||||||
Link { to: Route::Settings, class: "pure-button", "Settings" }
|
Link { to: Route::Settings, class: "pure-button", "Settings" }
|
||||||
for client in CLIENTS.read().iter() {
|
for client in CLIENTS.iter() {
|
||||||
div { class: "client", style: "margin-bottom: 50px",
|
div { class: "client", style: "margin-bottom: 50px",
|
||||||
p { "Name: {client.first_name} {client.last_name}" }
|
p { "Name: {client.first_name} {client.last_name}" }
|
||||||
p { "Description: {client.description}" }
|
p { "Description: {client.description}" }
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
use crate::read::Readable;
|
use crate::read::Readable;
|
||||||
use crate::read::ReadableVecExt;
|
|
||||||
use crate::rt::CopyValue;
|
use crate::rt::CopyValue;
|
||||||
use crate::signal::Signal;
|
use crate::signal::Signal;
|
||||||
use crate::write::Writable;
|
use crate::write::Writable;
|
||||||
use crate::{GlobalMemo, GlobalSignal, ReadOnlySignal, ReadableValueIterator, SignalData};
|
use crate::{GlobalMemo, GlobalSignal, ReadOnlySignal, SignalData};
|
||||||
use generational_box::Storage;
|
use generational_box::Storage;
|
||||||
|
|
||||||
use std::{
|
use std::{
|
||||||
|
@ -124,16 +123,6 @@ impl<T: 'static, S: Storage<T>> Clone for CopyValue<T, S> {
|
||||||
|
|
||||||
impl<T: 'static, S: Storage<T>> Copy for CopyValue<T, S> {}
|
impl<T: 'static, S: Storage<T>> Copy for CopyValue<T, S> {}
|
||||||
|
|
||||||
impl<T: 'static, S: Storage<Vec<T>>> IntoIterator for CopyValue<Vec<T>, S> {
|
|
||||||
type IntoIter = ReadableValueIterator<T, Self>;
|
|
||||||
|
|
||||||
type Item = S::Ref<T>;
|
|
||||||
|
|
||||||
fn into_iter(self) -> Self::IntoIter {
|
|
||||||
self.iter()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
read_impls!(Signal, S: Storage<SignalData<T>>, S: Storage<SignalData<Vec<T>>>);
|
read_impls!(Signal, S: Storage<SignalData<T>>, S: Storage<SignalData<Vec<T>>>);
|
||||||
write_impls!(Signal, Storage<SignalData<T>>, Storage<SignalData<Vec<T>>>);
|
write_impls!(Signal, Storage<SignalData<T>>, Storage<SignalData<Vec<T>>>);
|
||||||
|
|
||||||
|
@ -145,16 +134,6 @@ impl<T: 'static, S: Storage<SignalData<T>>> Clone for Signal<T, S> {
|
||||||
|
|
||||||
impl<T: 'static, S: Storage<SignalData<T>>> Copy for Signal<T, S> {}
|
impl<T: 'static, S: Storage<SignalData<T>>> Copy for Signal<T, S> {}
|
||||||
|
|
||||||
impl<T: 'static, S: Storage<SignalData<Vec<T>>>> IntoIterator for Signal<Vec<T>, S> {
|
|
||||||
type IntoIter = ReadableValueIterator<T, Self>;
|
|
||||||
|
|
||||||
type Item = S::Ref<T>;
|
|
||||||
|
|
||||||
fn into_iter(self) -> Self::IntoIter {
|
|
||||||
self.iter()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
read_impls!(
|
read_impls!(
|
||||||
ReadOnlySignal,
|
ReadOnlySignal,
|
||||||
S: Storage<SignalData<T>>,
|
S: Storage<SignalData<T>>,
|
||||||
|
@ -169,16 +148,6 @@ impl<T: 'static, S: Storage<SignalData<T>>> Clone for ReadOnlySignal<T, S> {
|
||||||
|
|
||||||
impl<T: 'static, S: Storage<SignalData<T>>> Copy for ReadOnlySignal<T, S> {}
|
impl<T: 'static, S: Storage<SignalData<T>>> Copy for ReadOnlySignal<T, S> {}
|
||||||
|
|
||||||
impl<T: 'static, S: Storage<SignalData<Vec<T>>>> IntoIterator for ReadOnlySignal<Vec<T>, S> {
|
|
||||||
type IntoIter = ReadableValueIterator<T, Self>;
|
|
||||||
|
|
||||||
type Item = S::Ref<T>;
|
|
||||||
|
|
||||||
fn into_iter(self) -> Self::IntoIter {
|
|
||||||
self.iter()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
read_impls!(GlobalSignal);
|
read_impls!(GlobalSignal);
|
||||||
|
|
||||||
read_impls!(GlobalMemo: PartialEq);
|
read_impls!(GlobalMemo: PartialEq);
|
||||||
|
|
|
@ -85,26 +85,26 @@ pub trait ReadableVecExt<T: 'static>: Readable<Vec<T>> {
|
||||||
|
|
||||||
/// Get an iterator over the values of the inner vector.
|
/// Get an iterator over the values of the inner vector.
|
||||||
#[track_caller]
|
#[track_caller]
|
||||||
fn iter(&self) -> ReadableValueIterator<T, Self>
|
fn iter(&self) -> ReadableValueIterator<'_, T, Self>
|
||||||
where
|
where
|
||||||
Self: Sized + Clone,
|
Self: Sized,
|
||||||
{
|
{
|
||||||
ReadableValueIterator {
|
ReadableValueIterator {
|
||||||
index: 0,
|
index: 0,
|
||||||
value: self.clone(),
|
value: self,
|
||||||
phantom: std::marker::PhantomData,
|
phantom: std::marker::PhantomData,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// An iterator over the values of a `Readable<Vec<T>>`.
|
/// An iterator over the values of a `Readable<Vec<T>>`.
|
||||||
pub struct ReadableValueIterator<T, R> {
|
pub struct ReadableValueIterator<'a, T, R> {
|
||||||
index: usize,
|
index: usize,
|
||||||
value: R,
|
value: &'a R,
|
||||||
phantom: std::marker::PhantomData<T>,
|
phantom: std::marker::PhantomData<T>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: 'static, R: Readable<Vec<T>>> Iterator for ReadableValueIterator<T, R> {
|
impl<'a, T: 'static, R: Readable<Vec<T>>> Iterator for ReadableValueIterator<'a, T, R> {
|
||||||
type Item = R::Ref<T>;
|
type Item = R::Ref<T>;
|
||||||
|
|
||||||
fn next(&mut self) -> Option<Self::Item> {
|
fn next(&mut self) -> Option<Self::Item> {
|
||||||
|
|
|
@ -175,7 +175,7 @@ pub trait WritableVecExt<T: 'static>: Writable<Vec<T>> {
|
||||||
|
|
||||||
/// Gets an iterator over the values of the vector.
|
/// Gets an iterator over the values of the vector.
|
||||||
#[track_caller]
|
#[track_caller]
|
||||||
fn iter(&self) -> WritableValueIterator<T, Self>
|
fn iter_mut(&self) -> WritableValueIterator<T, Self>
|
||||||
where
|
where
|
||||||
Self: Sized + Clone,
|
Self: Sized + Clone,
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Reference in a new issue