const VALUE = "VALUE" ; //值类型 (等于?)
const INTERVAL = "INTERVAL" ; //区间类型 (区间内)
const SET = "SET" ; //集合类型 (等于)
//用于渲染公告栏的结构(作为DashboardLayout中state的一个字段)
const channel_list = [
{
id: "dsa45ds5a453as" , //uuid
name: "帖子1" , //不可重复 input框
type: VALUE , //select框
remark: "我是描述" , //textArea
value: ["劳劳劳"] , //现有的图表一个点击事件只能产生一个 明确 的值
} ,
{
id: "dasd45ads45da" ,
name: "帖子2" ,
type: INTERVAL ,
remark: "我是描述" , //textArea
value: [10 , 1000] , //如何让点击图表事件能产生两个 明确 的值???
} ,
{
id: "dsa45dsa4d5as4da" ,
name: "帖子3" ,
type: SET ,
remark: "我是描述" , //textArea
value: ["劳" , "丹" , "峰"] , //如何让点击图表事件能产生多个 明确 的值
}
] ;
//当前被选中编辑的channel的id
const selected_channel_id = null ;
//所有对channel_list的修改 最终 都通过这个函数进行
const handleChangeOfChannelList = (new_channel_list) => {
//this.setState({new_channel_list})
}
//增加一条帖子
const createChannel = ({
id = "从getUuid()中获取" ,
name = "从getUuid()中获取" , //默认为uuid
type = VALUE , //默认为 VALUE
value = null , //默认为空
}) => {
//重名校验、类型判断等逻辑,若检查无误,则写进channel_list
handleChangeOfChannelList([
...channel_list ,
{id , name , type , value }
]) ;
}
//删除一条帖子
const deleteChannel = ({
id
}) => {
//在channel_list中找到该记录并删除(_.reject(channel_list , { id }))
//调用handleChangeOfChannelList更新
}
//改动一条帖子
const updateChannel = (props) => {
const {
id , name , type , value
} = props ;
//根据该帖子的type来约束value的值,若不符合约束,则不允许修改
}
//改动一条帖子的value
const updateChannelValue = (props) => {
const {
id , value
} = props ;
//根据该帖子的type来约束value的值,若不符合约束,则不允许修改
}
/*主界面*/
//图表状态集合
const chart_card_list = [
{
name: "ThePieChart(发布者)" ,
chart_data: {} ,
//图表的行为
chart_behavior: {
//用于渲染图表内部的发布、订阅表单
//发布表单
publish: {
//向何处诉说
channel_list: [
{
channel_id: "dsa45ds5a453as" , //通过这个频道发布内容(图表的点击行为触发发布行为)
}
] ,
} ,
//订阅表单
subscribe: {
//从何处聆听
channel_list: [
{
channel_id: "dsa45ds5a453as" , //通过这个频道收听内容
column_list: [
//关联的数据列(维度和度量均可)
//dimension and metric
]
}
] ,
} ,
}
} ,
{
name: "TheLineChart(订阅者)" ,
chart_data: {} ,
}
] ;
//用于图表的更新公告栏的方法
const updateChannelValueFromChart = ({
chart_card_id , //用于从chart_card_list中寻找到与之对应的publish的channel_list
value
}) => {
/*
1.根据chart_card_id找到相应的chart_card ;
2.遍历chart_card.chart_behavior.publish.channel_list,拿到每个channel_id
3.根据channel_id调用updateChannelValue完成公告栏中值的更新
*/
}
const handleChangeOfChartBehavior = (chart_behavior) => {
//用户通过BehaviorEditor的表单编辑所产生的数据都通过该函数回流
}
/*图表1(发布者)关注的内容 , 比如是一个饼图 (维度列为[部门A,部门B,部门C])*/
const ThePieChart = {
props: {
//数据
chart_card_id , //将改图表的id传入(之前没有往图表内部传)
//方法
updateChannelValueFromChart , //往公告栏中某一区域更新value(图表被点击时取值并触发)
/* !!!!对上述方法的补充!!!!
在CardContent中有一个和图表钻取相关的方法handleClickChart,实现过程中请注意这两者的区分
*/
}
} ;
//用于编辑图表专属的发布频道和订阅频道(主要以表单为主)
ThePieChart.BehaviorEditor = {
props: {
//数据
channel_list , //全集(用于渲染select选择框)
chart_behavior , //配合channel_list用于渲染图表内部部件BehaviorEditor
//方法
onChangeOfChartBehavior: handleChangeOfChartBehavior //用户通过BehaviorEditor的表单编辑所产生的数据都通过该函数回流
}
}
/*图表2(订阅者)关注的内容 , 比如是一个折线图 (维度列为[部门A,部门B,部门C,部门D])*/
const TheLineChart = {
} ;
TheLineChart.BehaviorEditor = {
props: {
//方法
}
}