lariv-rs 0.1.0

Compile-time plugin web application framework built on Axum, SeaORM, Maud, and HTMX
Documentation
//! Breadcrumb trails for CRM pages.

use maud::Markup;

use crate::components::{Crumb, breadcrumbs};

use super::routes::{
    CompanyDefaultRouteTag, CompanyDetailRouteTag, CompletedTaskDetailRouteTag,
    ContactDefaultRouteTag, ContactDetailRouteTag, ConvertedLeadDetailRouteTag,
    FailedLeadDetailRouteTag, LeadDefaultRouteTag, LeadDetailRouteTag, LeadTagDefaultRouteTag,
    LeadTagDetailRouteTag, TaskDefaultRouteTag, TaskDetailRouteTag,
};

fn leads_tab_url(tab: &str) -> String {
    crate::http::RouteQueryBuilder::new(LeadDefaultRouteTag)
        .query("tab", tab)
        .build()
}

fn entity_crumbs(
    list_label: &'static str,
    list_url: &str,
    name: &str,
    detail_url: &str,
    action: Option<&str>,
) -> Markup {
    match action {
        None => breadcrumbs(&[
            Crumb {
                label: list_label,
                href: Some(list_url),
            },
            Crumb {
                label: name,
                href: None,
            },
        ]),
        Some(act) => breadcrumbs(&[
            Crumb {
                label: list_label,
                href: Some(list_url),
            },
            Crumb {
                label: name,
                href: Some(detail_url),
            },
            Crumb {
                label: act,
                href: None,
            },
        ]),
    }
}

pub fn leads_list_crumbs() -> Markup {
    breadcrumbs(&[Crumb {
        label: "Leads",
        href: None,
    }])
}

pub fn lead_crumbs(name: &str, lead_id: i64, action: Option<&str>) -> Markup {
    entity_crumbs(
        "Leads",
        &leads_tab_url("active"),
        name,
        &LeadDetailRouteTag::new(lead_id).url(),
        action,
    )
}

pub fn lead_update_crumbs(name: &str, lead_id: i64, update_label: &str) -> Markup {
    breadcrumbs(&[
        Crumb {
            label: "Leads",
            href: Some(&leads_tab_url("active")),
        },
        Crumb {
            label: name,
            href: Some(&LeadDetailRouteTag::new(lead_id).url()),
        },
        Crumb {
            label: update_label,
            href: None,
        },
    ])
}

pub fn converted_lead_crumbs(name: &str, converted_id: i64, action: Option<&str>) -> Markup {
    entity_crumbs(
        "Leads",
        &leads_tab_url("converted"),
        name,
        &ConvertedLeadDetailRouteTag::new(converted_id).url(),
        action,
    )
}

pub fn failed_lead_crumbs(name: &str, failed_id: i64, action: Option<&str>) -> Markup {
    entity_crumbs(
        "Leads",
        &leads_tab_url("failed"),
        name,
        &FailedLeadDetailRouteTag::new(failed_id).url(),
        action,
    )
}

pub fn lead_tags_list_crumbs() -> Markup {
    breadcrumbs(&[Crumb {
        label: "Tags",
        href: None,
    }])
}

pub fn lead_tag_crumbs(name: &str, id: i64, action: Option<&str>) -> Markup {
    let list_url = LeadTagDefaultRouteTag.url();
    entity_crumbs(
        "Tags",
        &list_url,
        name,
        &LeadTagDetailRouteTag::new(id).url(),
        action,
    )
}

pub fn companies_list_crumbs() -> Markup {
    breadcrumbs(&[Crumb {
        label: "Companies",
        href: None,
    }])
}

pub fn company_crumbs(name: &str, id: i64, action: Option<&str>) -> Markup {
    let list_url = CompanyDefaultRouteTag.url();
    entity_crumbs(
        "Companies",
        &list_url,
        name,
        &CompanyDetailRouteTag::new(id).url(),
        action,
    )
}

pub fn contacts_list_crumbs() -> Markup {
    breadcrumbs(&[Crumb {
        label: "Contacts",
        href: None,
    }])
}

pub fn contact_crumbs(name: &str, id: i64, action: Option<&str>) -> Markup {
    let list_url = ContactDefaultRouteTag.url();
    entity_crumbs(
        "Contacts",
        &list_url,
        name,
        &ContactDetailRouteTag::new(id).url(),
        action,
    )
}

fn tasks_tab_url(tab: &str) -> String {
    crate::http::RouteQueryBuilder::new(TaskDefaultRouteTag)
        .query("tab", tab)
        .build()
}

pub fn tasks_list_crumbs() -> Markup {
    breadcrumbs(&[Crumb {
        label: "Tasks",
        href: None,
    }])
}

pub fn task_crumbs(name: &str, id: i64, action: Option<&str>) -> Markup {
    entity_crumbs(
        "Tasks",
        &tasks_tab_url("uncompleted"),
        name,
        &TaskDetailRouteTag::new(id).url(),
        action,
    )
}

pub fn completed_task_crumbs(name: &str, id: i64, action: Option<&str>) -> Markup {
    entity_crumbs(
        "Tasks",
        &tasks_tab_url("completed"),
        name,
        &CompletedTaskDetailRouteTag::new(id).url(),
        action,
    )
}